C#学习教程:ThreadPool SetMaxThreads和SetMinThreads Magic Number分享


ThreadPool SetMaxThreads和SetMinThreads Magic Number

是否有一个神奇的数字或公式来设置ThreadPool的SetMaxThreads和SetMinThreads的值? 我有成千上万个需要执行的长时间运行方法,但却无法找到设置这些值的完美匹配。 任何建议将不胜感激。

默认的最小线程数是您的计算机具有的核心数。 这是一个很好的数字,运行更多的线程通常没有核心。

默认的最大线程数是.NET 2.0 SP1及更高版本的核心数的250倍。 这里有很大的喘息空间。 在四核机器上,如果没有一个线程在合理的时间内完成,则需要499秒才能达到该最大值。

线程池调度程序尝试将活动线程数限制为最小值,默认情况下为您拥有的核心数。 如果活动线程没有完成,它会再次启动一个线程。 运行很长时间或执行大量阻塞但不是由I / O引起的线程不适合线程池。 您应该使用常规线程。

达到最大值并不健康。 在四核计算机上,只需这些线程的堆栈就会消耗一千兆字节的虚拟内存空间。 很有可能获得OOM。 如果这是您的问题,请考虑降低最大线程数。 或者考虑从一个线程安全队列中开始接收一些工作包的常规线程。

通常,神奇的数字是不管它。 ThreadPool可以很好地处理这个问题。

话虽这么说,如果你正在做很多长时间运行的服务, 并且那些服务将在他们等待的时间很长,你可能想要增加最大线程来处理更多选项。 (如果进程没有阻塞,那么如果增加线程数,你可能只会减慢速度…)

配置您的应用程序以查找正确的数字。

如果您想要更好的控制,您可能需要考虑不使用内置的ThreadPool。 在http://www.codeproject.com/KB/threads/smartthreadpool.aspx上有一个很好的替代品。

上述就是C#学习教程:ThreadPool SetMaxThreads和SetMinThreads Magic Number分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/960026.html

发表评论

邮箱地址不会被公开。 必填项已用*标注