是否有一个魔术数字或公式来设置ThreadPool的SetMaxThreads和SetMinThreads的值?我有成千上万个需要执行的长时间运行的方法,但找不到设置这些值的完美匹配。任何建议将不胜感激。
最佳答案
默认的最小线程数是您的计算机具有的内核数。这是一个很好的数字,运行多于线程的线程通常没有意义。
默认最大线程数是.NET 2.0 SP1及更高版本上具有的内核数的250倍。这里有大量的呼吸空间。在四核计算机上,如果没有一个线程在合理的时间内完成,则达到该最大值将需要499秒。
线程池调度程序尝试将 Activity 线程数限制为最少,默认情况下将您拥有的核心数限制为最少。如果 Activity 线程未完成,则每秒可以两次启动一个线程。运行时间很长或执行很多不是由I/O引起的阻塞的线程都不是线程池的良好候选对象。您应该改用常规线程。
最大限度地发展并不健康。在四核计算机上,仅这些线程的堆栈会消耗1 GB的虚拟内存空间。获得OOM的可能性很大。如果这是您的问题,请考虑降低最大线程数。或者考虑只启动几个从线程安全队列接收工作包的常规线程。
关于c# - ThreadPool SetMaxThreads和SetMinThreads魔数(Magic Number),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2043909/