c# 4.0 - c# 4.0与有限的非专用线程池线程消费者队列



c# 4.0的新BlockingCollection没有满足我们需要的一个简单要求:
*任务项的并发队列。
*消费者-一次限制N个线程-来自线程池(非专用于此队列的线程,如果队列中没有项目则不会阻塞)。特别适用于我们每次只需要限制一个(N = 1)线程的资源使用,并且队列可以不时为空。

SmartThreadPool有一个很好的实现,使用大小为1的线程组。

我正在寻找新的c# 4.0并行库的一个很好的解决方案,利用。net内部线程池。我可以想到一些解决方案,但我想知道是否有一些优雅的东西我错过了。

你觉得怎么样?

问候,Shlomi

线程池中的任务不应该阻塞。虽然在。net 4.0中已经做了一些工作来帮助支持它,但线程池并不是真正用于长时间运行的任务,当然也不是用于阻塞的操作(根据经验,如果线程启动时间对于任务所花费的时间可以忽略不计,那么你最好自己启动线程)。

听起来你想做的事情,你可能更适合IObservable的东西。看看Rx(响应式)扩展,你可以用IObservable做一些很酷的事情。默认情况下,IObservable一次只处理一个请求,但你可以很容易地在每个对象被发送给你时把它扔到线程池中(用于实际处理)和/或使用TPL。一个具有最大并行度的TaskScheduler可能会对你有所帮助。

我想不出有什么现成的东西能满足你的要求。您可能希望将ConcurrentQueueEventWaitHandle以及您可以控制的一些工作线程配对。

如果有人对提议的解决方案感兴趣,请参阅MSDN论坛下的以下帖子:MSDN并行计算论坛问题。

这是我问的与上面有关的问题,Stephen Toub给了我一个满意的答案。

Shlomi

最新更新