2009-11-28 60 views

回答

0

簡而言之,最爲明確。閱讀一些討論。

調整服務是一種藝術形式,或者需要基準測試(並且需要基準的概念數量空間巨大)。我相信這取決於以下因素(這並非詳盡無遺)。

  1. 這是從準備qeueue拿起一個項目需要多少時間來處理,並
  2. 工作線程多少是他們?
  3. 他們有多少生產者,他們生產的頻率如何?
  4. 您使用的是什麼類型的等待概念?自旋鎖或內核等待(後者更慢)?

所以,如果數據項都往往會產生,並且如果線程的量較大,並且處理時間是低的:該數據結構可以被鎖定大窗戶,從而導致抖動。

其他因素可能包括數據結構的使用以及數據結構被鎖定了多長時間,例如,如果使用鏈表來管理這樣的隊列,addremove版本的操作需要一定的時間。當項目爲added時,prio隊列(堆)平均需要多一些操作。

如果您的系統進行業務處理,你可以通過只用拿這個問題出來的畫面:基於

  1. 的工藝木構建築,只是產卵多生產消費過程和使用文件系統進行通信,
  2. 使用非預先協作線程編程語言,如無堆棧python,Lua或Erlang。

也注意:同步原語導致處理器間高速緩存 - 內聚性泛洪,它們是not good,因此應該謹慎使用。

的討論可以去填補博士論文:d

0

每個CPU就緒隊列爲數據結構的自然選擇。這是因爲,大多數操作系統都會嘗試在同一個CPU上保留一個進程,出於很多原因,您可以使用谷歌。這意味着什麼?如果一個線程就緒並且另一個CPU空閒,OS不會將線程快速遷移到另一個CPU。負載平衡只能在長時間運行。

如果情況不一樣,那不是保持線程cpu親和力的設計目標,而是線程遷移頻繁,然後保持單獨的每個cpu運行隊列將代價高昂。