如何在线程用完时避免ThreadPool瓶颈

时间:2015-03-27 08:20:18

标签: c# .net multithreading threadpool timing

我们有一个应用程序有一些时间限制,比如说我们需要每500毫秒执行一次动作,它是一种监视器,所以如果我们在500毫秒之前不发送消息,那么坏事就会发生。

应用程序使用了很多ThreadPool,这个看门狗事物与ThreadPool交互。

我们发现在一些低端机器上,有时当我们排队一个新工作项时,执行它需要大约800ms才能看门狗开火。我们猜测它与ThreadPool耗尽线程/创建新线程有关。

有没有办法避免这种情况,比如强制ThreadPool提前或在不同的线程中创建线程,这样看门狗就不必等到ThreadPool可以执行请求了?

2 个答案:

答案 0 :(得分:2)

lawliet29的回复在某种程度上有所帮助。 但即使有很多线程,线程池也会变得饱和,某些任务可能会在全局任务队列的末尾排队。

我们在Akka.NET中遇到同样的问题,即使在负载很重的情况下我们也必须执行系统角色。

我们现在将这些敏感任务移动到它自己的专用线程池中,这样这些任务就不会在全局池队列的末尾结束。

https://github.com/helios-io/DedicatedThreadPool

我们可以使用特殊的任务调度程序将任务安排到此队列中。

答案 1 :(得分:1)

您可以尝试使用ThreadPool.SetMinThreads方法。

相关问题