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