我想用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