threadpool是否在应用程序域之间共享?
考虑一个创建多个应用程序域的过程。 这些应用程序域是否共享相同的线程池? 如果是,它如何在多个应用程序域之间协调?
ThreadPool在所有应用程序域之间共享 – 因为这意味着线程可能最终在appdomains之间切换(可能经常!),其中包括:
http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx
[…]实际上,我们已经违反了这个“规则”:自.NET 3.5起,CLR线程池为进程中的每个AppDomain维护了单独的FIFO队列,并为“本机”工作项保留了另外一个独立的FIFO队列作为主机排队的那些(ASP.net是此function的主要用户)。 我们在这些工作队列之间进行循环,允许每个人在执行下一个工作之前执行工作一段时间。[…]
顺便说一下,请注意严格来说,ThreadPool不再在整个进程中共享,因为v4 CLR允许与V2并排加载,并且每个都有自己的线程池。
线程池在所有appdomains之间共享,因为每个线程池线程都是上下文无关的,整个线程池运行时配置文件高度依赖于你运行的硬件(procs,超线程等等)
每个进程有一个线程池。 线程池的默认大小为每个可用处理器25个线程。 可以使用SetMaxThreads方法更改线程池中的线程数。 每个线程使用默认堆栈大小并以默认优先级运行。
资料来源: http : //msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx
如果我没记错的话,CLR会在内部处理线程池线程,并在提供另一个工作请求之前清除线程上下文。
不是100%肯定,但我认为线程池是每个进程一次,而不是每个AppDomain一次。 试试看线程和appdomain上的这篇文章: