3

我想了解设置ThreadPool.SetMinthreads的影响。我有一个Azure应用服务中运行多个虚拟应用程序。我的理解是,所有这些虚拟应用程序将共享应用程序池,并将只有一个工作进程(假设应用程序池的最大工作进程将为1)。ThreadPool SetMinThreads - 设置它的影响

我有以下两个问题。

  1. 在此设置中,如果设置了ThreadPool.SetMinThreads让我们说100个工作线程和IO线程,可我安全地假定每个应用程序域将有100个工作线程和100个IO线程加载时?确切地说,ThreadPool.SetMinThreads适用于AppDomain或工作进程或应用程序池? ThreadPool的范围是什么?
  2. 我还假设系统可以产生的最大线程数没有限制,因为它是由底层主机的容量决定的。这意味着,如果我没有明确设置ThreadPool.SetMaxThreads,则系统将产生新线程,并且如果持续加载直到CPU /内存达到最大值,系统将继续执行此操作。我立足于下面的语句来支持我的假设:

进程和线程,例如,需要物理内存,虚拟 内存,池内存,这样的进程或线程 可数在给定的Windows系统上创建最终由 其中一个资源决定,具体取决于创建进程或线程的方式以及首先命中哪个约束。 https://blogs.technet.microsoft.com/markrussinovich/2009/07/05/pushing-the-limits-of-windows-processes-and-threads/

+0

你为什么要改变它,它实际需要反正线程数?几乎没有必要改变线程池中的最小线程数。 Msoft花了很多时间使线程池行为最优化 - 你为什么不同? (编辑 - 不是说你错了,只是说可能有另一个解决方案) – mikelegg

+0

当你在这个有大量并发用户的系统上运行性能测试时,min线程会产生影响。错误数和响应时间与线程数有关 – Thomas

回答

2

的MinThreads支配多少工作线程没有延迟将催生

无论何时您需要线程池中的某个线程(无论是worker还是IOCP池),系统都会首先查看是否有空闲线程。

如果不是,它会查看当前产生了多少个线程。如果该数字小于MinThreads,它立即产生一个新的线程。否则,它会等待很短的时间,通常在300-500ms左右,尽管这取决于系统。如果仍然没有空闲线程,它会产生一个新的线程。

如果当然,这仍然受到MaxThreads的限制。所有这一切说,IIS非常善于根据您的机器计算出一个合理的数字,并且在大多数情况下,您最好不要管它;如果你只是担心服务请求,那么我不会亲自触摸它。另一方面,如果你自己产生了大量的后台任务,那么这可能是明智的。我强烈建议您在实际进行更改之前对其进行衡量。

虽然... MinThreads设置为100很少是有害的,尤其是在系统才会开始

相关问题