Tho*_*mas 10 c# asp.net azure azure-app-service-plans azure-web-app-service
我试图了解设置的影响ThreadPool.SetMinthreads.我在一个Azure应用服务中运行了多个虚拟应用程序.我的理解是,所有这些虚拟应用程序将共享App Pool,并且只有一个工作进程(假设App Pool的最大工作进程为1).
我有以下两个问题.
ThreadPool.SetMinThreads为100个工作线程和IO线程,我可以安全地假设每个应用程序域在加载时将有100个工作线程和100个IO线程吗?确切地说,ThreadPool.SetMinThreads适用于AppDomain或工作进程或应用程序池?ThreadPool的范围是什么?例如,进程和线程需要物理内存,虚拟内存和池内存,因此可以在给定Windows系统上创建的进程或线程数最终由这些资源之一决定,具体取决于进程的方式或者创建线程以及首先命中哪个约束. https://blogs.technet.microsoft.com/markrussinovich/2009/07/05/pushing-the-limits-of-windows-processes-and-threads/
MinThreads控制将毫不拖延地生成多少个工作线程.
每当您执行需要线程池中的线程(无论是工作线程还是IOCP池)的事情时,系统将首先查看是否存在空闲线程.
如果没有,它会查看当前生成了多少个线程.如果该数字小于MinThreads,它会立即生成一个新线程.否则它会等待很短的时间,通常在3到500毫秒左右,尽管这取决于系统.如果仍然没有自由线程,它将生成一个新线程.
当然,这一切仍然受到MaxThreads的限制.
总而言之,IIS非常善于根据您的机器确定一个合理的数字,在大多数情况下,您最好不要管它; 如果您只是担心提供请求,那么我不会亲自触摸它.另一方面,如果你自己产生了很多背景任务,那么这可能是明智的.我强烈建议您在实际进行更改之前对其进行测量.
虽然......将MinThreads设置为100很少有害,特别是因为系统只会启动它实际需要的线程数