单螺纹公寓vs多螺纹公寓

可能重复:
你能解释STA和MTA吗?

所有ThreadPool线程都在multithreading的公寓中。

– 根据MSDN

那是什么意思? 我真的关心multithreading与单线程模式的区别。 或者公寓模式是什么意思? 我已经阅读了MSDN,这对我来说并不合适。 我想我可能有一个想法,但我想在这里的人可以用简单的英语来解释。

谢谢,安东尼D

更新1

find这个可以解释STA和MTA吗?

任何人都可以更具描述性?

更新2

我也在寻找关于如何适用于线程池的答案,以及因此需要注意的问题。

STA(单线程公寓)和MTA(multithreading公寓)是与COM做的。 COM组件可以被devise为可以被单个线程访问,在这种情况下,它们被托pipe在一个STA中 ,或者它们可以在内部被线程安全地托pipe在一个MTA中 。 一个进程只能有一个MTA,但可以有多个STA。 如果你只打算使用COM组件,那么你真正需要知道的是你必须将公寓与组件匹配,否则将会发生令人讨厌的事情。

实际上,STA和MTA对.NET代码有影响。 有关详细信息,请参阅Chris Brumme的博客文章,然后您可能需要:

http://blogs.msdn.com/cbrumme/archive/2004/02/02/66219.aspx

了解.NET如何在.NET中抽取消息非常重要。 这确实有后果。

如果您的COM对象需要相信它在单线程环境中,请使用STA。 你保证创build和所有的调用将由同一个线程。 您可以安全地使用线程本地存储,并且不需要使用关键部分。

如果你的COM对象可以被多个线程同时访问,那么使用MTA–将不会有任何的守卫。

正如其他人所指出的,它一般对.NET应用程序影响不大。

但是,请注意,用于unit testing的Microsofttesting主机实际上是在STA中实现的,这意味着在unit testing中可以执行的操作有一些限制。 例如,你不能在一个unit testing的WaitHandle上执行WaitAll ,你正在使用微软的testing主机。

你不必担心它,除非你正在做COM-interop,在这种情况下,有编组问题。 它对.net本身没有影响。