2012-10-18 98 views
1

有兩種架構解決方案來實現的併發:共享所述V消息

  • 哪個共享狀態多張線程。這需要代碼鎖等鎖
  • 消息傳遞模型。消息被放入隊列中,然後由單個線程處理。

我的問題是,什麼時候多個線程的性能優於消息傳遞模型?例如,假設您有一臺可以通過將消息請求放置在內部提示上來異步處理消息請求的單個服務器。如果使用多線程服務器模型,那麼是否引入了瓶頸(例如,即使在TCP/IP)級別也沒有引入。

謝謝。

回答

1

雖然您的問題的答案可能取決於很多因素,但我認爲需要考慮的一個重要方面是如何充分利用您計算機中的多個CPU。正如你在這裏描述的那樣,如果你的機器有多個CPU,用一個線程處理所有消息的消息隊列方法並不是最優的。處理所有消息的一個線程可能會佔用一個CPU,而其他線程將使用其他可用的CPU。共享狀態方法可能更好地利用多個CPU。

但是,另一種方法是修改消息隊列算法,具有多個線程 - 在CPU數量之下最多一個或兩個 - 清空隊列並同時處理消息。這可以讓你對CPU的使用情況有一定的控制,特別是如果你可以選擇將特定的線程綁定到特定的CPU。這種高度的控制可能會使消息隊列的多線程版本優於共享狀態。

假設這個答案是相關的,源於現今許多機器確實有多個CPU的事實。如果這不適用於你的情況,那麼請給出一個關於你的邊界條件的更詳細的描述,以及當你說「跑贏」時你的表現是什麼。