我正在尝试用BlockingQueue构建一个通用的生产者/消费者
我希望它尽可能多线程或并行,但不要吃掉所有的计算机资源
假设我们有一个生产者,将消费者作为线程或一个消费者更好
消费数据时的任务?
while(true)
{
queue.TryTake(...) { Task.Factory.StartNew(...); }
}
或
Thread t = new Thread(Consumer.Start);
答案 0 :(得分:0)
如果您担心计算机资源,解决方案可能是执行所有监视任务队列的工作线程池,并且只要将任务放入队列并且工作线程空闲,它就会从队列中读取它并开始工作?
这应该很容易设置。
//丹尼尔
答案 1 :(得分:0)
也许是一个组合。
你的第一个提案有一个问题,当队列填满时,你会开始很多任务,也许太多了。
第二个只使用1个线程(我假设这就是你的意思)。
你可能应该为N个消费者和N设备制定一些策略。这在很大程度上取决于工作量,I / O等的使用。
可能的策略是
您也可以使用Task(使用LongRunning选项)而不是Thread。