我想用BlockingQueue构建一个通用生产者/消费者。
我希望它尽可能多线程或并行,但不要吃掉所有的计算机资源。
假设我们有一个生产者,是消费者作为线程还是一个消费者更好? 消费数据时的任务?在仿制生产者/消费者中使用任务
while(true)
{
queue.TryTake(...) { Task.Factory.StartNew(...); }
}
或
Thread t = new Thread(Consumer.Start);
我想用BlockingQueue构建一个通用生产者/消费者。
我希望它尽可能多线程或并行,但不要吃掉所有的计算机资源。
假设我们有一个生产者,是消费者作为线程还是一个消费者更好? 消费数据时的任务?在仿制生产者/消费者中使用任务
while(true)
{
queue.TryTake(...) { Task.Factory.StartNew(...); }
}
或
Thread t = new Thread(Consumer.Start);
也许是一种组合。
你的第一个建议有一个问题,当Queue填满时,你会开始很多任务,可能太多。
第二个将只使用1个线程(我认为这就是你的意思)。
你或许应该开始n个使用者和设备的某些战略N.这在很大程度上取决于工作量,使用I/O等
可能的策略是
而且你还不如用一个任务(LongRunning选项),而不是一个线程。
称为“对许多”的任务量是多少? – guyl 2011-04-26 10:15:20
@guy:当他们继续叠加。小心不要将重量从阻塞(!)集合移动到任务队列。 – 2011-04-26 10:28:35
明白了..这是一个很好的想法,我没有想过。 – guyl 2011-04-26 10:32:16