我可以对C#System.Threading.ThreadPool进行分区吗?

时间:2011-02-15 15:17:43

标签: c# threadpool

我喜欢ThreadPool。它让我的生活更美好。然而,我的爱情可能已经悄然变成了我需要逃避的虐待关系,所以我需要来自我的SO兄弟的一些建议(可能是姐妹们,虽然我还没有看到任何实际的证据)。

我的基本问题是我有几个不同的库都以不协调的方式使用线程池,并且可能会耗尽线程。我希望有一些方法可以将ThreadPool分区,所以我可以给出一个特定的1类线程,另外20个线程,另外5个线程,等等。

我知道我可以编写自己的ThreadPool实现。我不想这样做,因为我很懒。那么,那里有一个简单的解决方案吗?

目前我不得不使用3.5 CLR。我知道很多这样的东西在4.0中变得更容易了。

3 个答案:

答案 0 :(得分:3)

不幸的是,没有。这也是我使用.NET线程池的bugbears之一。即使在带有并行扩展的.NET 4中,它通常基于单个系统线程池 - 您必须做一些工作来创建自己的单独线程池(并将其作为任务调度程序或类似的东西提供给任务)。

我怀疑MS已对此进行了研究,发现大多数客户都是通过单个线程池找到的 - 但我同意在这里有更多的灵活性会很好...

答案 1 :(得分:0)

不要重写自己的ThreadPool。

为什么不用Adapter Pattern实际实现所需的逻辑?

答案 2 :(得分:0)

我对MSDN文章的理解是,线程池适用于短期线程。线程池的整个想法是创建新的内核线程有很多开销,所以创建一个内核线程并让该线程在一件事上工作,然后移动到下一个。

如果您的线程池中有长时间运行的线程,则需要将它们移动到常规线程。

如果你的线程“耗尽”,那么它们的运行时间太长了。