积极答复者
c# winform 多线程

问题
答案
-
你好!
这里的确容易造成一定的误解,我详细说明一下,希望对你有帮助:
.NET支持两种线程模型:STA和MTA。
STA(single threaded apartments)。
MTA(multi threaded apartments)。
先说说什么是apartment:
apartment只是一个逻辑上的概念,它可以包含一个或多个线程。 一个AppDomain可以包括一个或多个apartment。
STA是指该apartment中只能包含一个thread。
MTA指该apartment中可以包含多个thread。
STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程( 跨apartment调用组件实例必须要进行调度),存在性能问题。
当创建一个新的STA线程时,CLR会在该AppDomain中创建一个apartment和thread(从属于该apartment)。如果是创建 MTA线程,则会CLR会检查该AppDomain是否存在一个存放MTA的apartment,如果存直接创建线程到该MTA的apartment中,否则就创建一个 MTA的apartment和thread(从属于该apartment)。
一个进程可以包含多个STA,但只能有一个MTA。MTA中各线程可以并行的调用本apartment内实例化的组件,而不需要进行调度。跨apartment调用组件实例必须要进行调度。(除非使用了自由线程调度器)
说了很多,不理解关系也不大,这两个都是COM里的概念,很你现在编写的代码关系不大,如果想深入了解,可以学习一下COM的相关知识!
周雪峰- 已标记为答案 韦恩卑鄙 waywaModerator 2009年5月28日 3:40
全部回复
-
你好!
这里的确容易造成一定的误解,我详细说明一下,希望对你有帮助:
.NET支持两种线程模型:STA和MTA。
STA(single threaded apartments)。
MTA(multi threaded apartments)。
先说说什么是apartment:
apartment只是一个逻辑上的概念,它可以包含一个或多个线程。 一个AppDomain可以包括一个或多个apartment。
STA是指该apartment中只能包含一个thread。
MTA指该apartment中可以包含多个thread。
STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程( 跨apartment调用组件实例必须要进行调度),存在性能问题。
当创建一个新的STA线程时,CLR会在该AppDomain中创建一个apartment和thread(从属于该apartment)。如果是创建 MTA线程,则会CLR会检查该AppDomain是否存在一个存放MTA的apartment,如果存直接创建线程到该MTA的apartment中,否则就创建一个 MTA的apartment和thread(从属于该apartment)。
一个进程可以包含多个STA,但只能有一个MTA。MTA中各线程可以并行的调用本apartment内实例化的组件,而不需要进行调度。跨apartment调用组件实例必须要进行调度。(除非使用了自由线程调度器)
说了很多,不理解关系也不大,这两个都是COM里的概念,很你现在编写的代码关系不大,如果想深入了解,可以学习一下COM的相关知识!
周雪峰- 已标记为答案 韦恩卑鄙 waywaModerator 2009年5月28日 3:40