我正在寻找一个线程池库中的.NET轻量级线程池库中的.NET
- 我应该能推约100.000任务,因此应为“堵”的支持。 (显然我不能一下子推这么多的任务,所以应该支持一些阻塞而增加新的任务,直到新的可用插槽应该阻塞的线程)
- 不是太复杂
- 没那么贵(内存 - CPU明智)
- 自由/开源(商业友好的许可证)
我已经有我自己的解决方案,它支持所有这些,但我不能肯定,如果这是最好的实现或不。所以我想看看其他图书馆。
这将主要用于HTTP请求,所以CPU更少响应等待。这意味着100个并发线程可以接受。
我正在寻找一个线程池库中的.NET轻量级线程池库中的.NET
我已经有我自己的解决方案,它支持所有这些,但我不能肯定,如果这是最好的实现或不。所以我想看看其他图书馆。
这将主要用于HTTP请求,所以CPU更少响应等待。这意味着100个并发线程可以接受。
感谢所有回复,在经过其他图书馆之后,我注意到他们对于我所寻找的内容都非常复杂。
我坚持我自己的实现,这基本上是一个围绕Threading.Thread()
阻塞队列实现,它工作得很好。
为什么不使用.NET ThreadPool?
如果您有很多任务,请考虑实施service bus或第三方中间件平台,如BizTalk。如果这太多了,那么普通的Message Queuing。
此外,如果您拥有SQL Server并希望更容易备份和管理队列,请考虑SQL Server Service Broker。
我最近见过的最好的是杰弗里里希特的PowerThreading library。您可能还想查看this Channel 9 video
PowerThreading库的好处在于,它通过允许跨多个请求共享单个线程来有效使用ThreadPool。
我在CodeProject上找到了ThreadPool上的interesting take。它是一个实例化的ThreadPool(因此,不是静态的并且跨线程切片),并且它具有若干功能来自定义性能。
Retlang岩石!或来自Ayende的Rhino Queues。
查看微软的CCR。它有一个非常高效的线程池,并且具有可以直接处理许多异步I/O请求的原语。
在它的模型下,提供您的I/O是真正异步的,您需要的线程数量恰好就是您盒子上的核心数量。更多是浪费。
我有同样的需要你,但我的问题是用不同的方式措辞,以达到非常相似的答案: Is there any way for executing a method multiple times, but managing connections/threads? (.NET)
看起来很有趣,如果我能理解LINQ fu我会给它一个镜头。 – 2009-02-19 08:02:28
.NET 4.0中添加任务并行库将必须对这种直接的支持。如果您不知道它,它既可以作为基于.Net 3.5的独立CTP,也可以作为去年秋季推出的Visual Studio 2010 CTP的一部分。这里有一个指向team blog的链接,它有更多的信息和一个指向下载的指针。
你有没有使用过.NET Threadpool并阅读我的需求?因为.Net线程池并不适合这个。无法一次处理100个线程,会消耗太多内存,并且设计上没有阻塞功能。 – 2009-02-17 23:49:16