2009-02-17 93 views
6

我正在寻找一个线程池库中的.NET轻量级线程池库中的.NET

  • 我应该能推约100.000任务,因此应为“堵”的支持。 (显然我不能一下子推这么多的任务,所以应该支持一些阻塞而增加新的任务,直到新的可用插槽应该阻塞的线程)
  • 不是太复杂
  • 没那么贵(内存 - CPU明智)
  • 自由/开源(商业友好的许可证)

我已经有我自己的解决方案,它支持所有这些,但我不能肯定,如果这是最好的实现或不。所以我想看看其他图书馆。

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

回答

0

感谢所有回复,在经过其他图书馆之后,我注意到他们对于我所寻找的内容都非常复杂。

我坚持我自己的实现,这基本上是一个围绕Threading.Thread()阻塞队列实现,它工作得很好。

2

为什么不使用.NET ThreadPool?

+1

你有没有使用过.NET Threadpool并阅读我的需求?因为.Net线程池并不适合这个。无法一次处理100个线程,会消耗太多内存,并且设计上没有阻塞功能。 – 2009-02-17 23:49:16

1

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

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

3

我最近见过的最好的是杰弗里里希特的PowerThreading library。您可能还想查看this Channel 9 video

PowerThreading库的好处在于,它通过允许跨多个请求共享单个线程来有效使用ThreadPool。

0

我在CodeProject上找到了ThreadPool上的interesting take。它是一个实例化的ThreadPool(因此,不是静态的并且跨线程切片),并且它具有若干功能来自定义性能。

2

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

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

1

.NET 4.0中添加任务并行库将必须对这种直接的支持。如果您不知道它,它既可以作为基于.Net 3.5的独立CTP,也可以作为去年秋季推出的Visual Studio 2010 CTP的一部分。这里有一个指向team blog的链接,它有更多的信息和一个指向下载的指针。