.NET中轻量级线程池库

6
我正在寻找一个.NET线程池库。
  • 我需要推送大约100,000个任务,因此应该支持“阻塞”。 (显然我不能一次性推送这么多任务,所以应该在添加新任务时支持一些阻塞,并且应该阻止线程直到有新的插槽可用)
  • 不要过于复杂
  • 不要太消耗内存和CPU资源
  • 免费/开源(商业友好许可证)
我已经有了自己的解决方案,它支持所有这些功能,但我不确定它是否是最佳实现。因此,我想研究其他库。
这将主要用于HTTP请求,因此更少的CPU等待响应。 这意味着100个并发线程是可以接受的。
9个回答

3
我最近看到的最好的编程相关内容是Jeffery Richter的PowerThreading library。你可能还想查看this Channel 9 video
PowerThreading库的好处在于它通过允许单个线程跨多个请求共享,有效地利用了线程池。

2
为什么不直接使用.NET线程池?

1
你是否曾经使用过.NET线程池并阅读了我的要求?因为 .Net线程池实际上并不适合这个问题。它无法处理100个线程,会消耗太多的内存,并且设计上也没有阻塞功能。 - dr. evil

2

2

请查看微软的CCR。它有一个非常高效的线程池,并且具有使处理许多未完成异步I/O请求变得简单的基元。

在其模型下,只要您的I/O确实是异步的,您所需的线程数将恰好等于您框中的核心数。多余的任何东西都是浪费。


1
如果您有许多任务,请考虑实施服务总线或像BizTalk这样的第三方中间件平台。 如果这太多了,则可以使用纯粹的消息队列
另外,如果您拥有SQL Server并希望更轻松地备份和管理队列,请考虑SQL Server Service Broker

1

听起来很有趣,如果我能理解 LINQ 的奥义,我会试一试的。 - dr. evil

1

.Net 4.0 正在添加任务并行库,该库将直接支持此功能。如果您不知道它的存在,它可作为基于 .Net 3.5 的独立 CTP 和去年秋季发布的 Visual Studio 2010 CTP 的一部分来使用。 这里是一个链接到团队博客,其中包含更多信息和下载指针。


0

感谢所有的回复,在查看了其他库之后,我发现它们都对我所需的功能过于复杂。

我决定坚持使用自己的实现,它基本上是围绕Threading.Thread()实现的阻塞队列,而且它运行得非常好。


0

我在CodeProject上发现了一个关于ThreadPool的有趣观点,这位作者提出了一种实例化的ThreadPool(因此不是静态的并且可以跨线程共享),并且它具有多个功能来自定义性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接