.NET中的轻量级线程池库

时间:2009-02-17 23:34:27

标签: .net multithreading http

我正在寻找.NET中的线程池库

  • 我应该能够推进大约100.000个任务,因此应该为“阻止”提供支持。 (显然我不能同时推送这么多任务,所以应该在添加新任务时支持一些阻塞,并且应该阻止线程直到新的插槽可用
  • 没有过于复杂
  • 不太贵(内存 - CPU明智)
  • 免费/开源(商业友好许可证)

我已经拥有了自己的解决方案,支持所有这些,但我不确定它是否是最好的实现。所以我想查看其他库。

这将主要用于HTTP请求,因此更少的CPU响应等待。这意味着可以接受100个并发线程。

9 个答案:

答案 0 :(得分:3)

我最近见过的最好的是Jeffery Richter的PowerThreading library。您可能还想查看this Channel 9 video

PowerThreading库的优点在于它通过允许在多个请求之间共享单个线程来有效利用ThreadPool。

答案 1 :(得分:2)

为什么不直接使用.NET ThreadPool?

答案 2 :(得分:2)

Retlang岩石!或者来自Ayende的Rhino Queues

答案 3 :(得分:2)

查看Microsoft的CCR。它有一个非常高效的线程池,并具有原语,可以直接处理许多异步I / O请求。

在它的模型下,提供你的I / O是真正异步的,你需要的线程数正好是盒子上的核心数量。更多的是浪费。

答案 4 :(得分:1)

如果您有很多任务,请考虑实施像BizTalk这样的service bus或第三方中间件平台。如果那太多了,那么请Message Queuing

此外,如果您有SQL Server并希望更容易备份和管理队列,请考虑SQL Server Service Broker

答案 5 :(得分:1)

我和你一样有必要,但我的问题以不同的方式表达,以达到非常相似的答案: Is there any way for executing a method multiple times, but managing connections/threads? (.NET)

答案 6 :(得分:1)

.Net 4.0正在添加任务并行库,它将直接支持这一点。如果您不了解它,它既可以作为基于.Net 3.5的独立CTP,也可以作为去年秋天推出的Visual Studio 2010 CTP的一部分。这是team blog的链接,其中包含更多信息和指向下载的指针。

答案 7 :(得分:0)

我在CodeProject上找到了一个关于ThreadPool的interesting take。它是一个实例化的ThreadPool(因此,不是跨线程的静态和碎片),它有几个功能来定制性能。

答案 8 :(得分:0)

感谢所有的回复,在浏览了其他图书馆后,我发现他们所看到的一切都过于复杂。

我坚持使用自己的实现,这基本上是围绕Threading.Thread()的阻塞队列实现,它可以正常工作。