2012-04-13 93 views
0

我經歷了幾個問題,如POSIX Threads on a Multiprocessor SystemConcurrency of posix threads in multiprocessor machineThreads & Processes Vs MultiThreading & Multi-Core/MultiProcessor : How they are mapped?在多進程多處理器環境

 

基於這些和其他一些維基文章去選擇的線程數,我相信,有三個基本的作品即一個系統,輸入,處理和輸出

 

  • 對於CPU - CPU密集型的線程綁定處理號(申請號*每個應用程序線程)應該是處理器的核的apprx 1〜1.5倍的數量。

  • 輸入和輸出線程必須足夠大,以消除任何瓶頸。例如,對於基於查詢/查詢確認和響應/響應確認模型的通信系統,在I/O等待狀態中不能浪費時間。

  • 如果對動態內存有很大的要求,最好使用比線程更多的進程(以避免內存同步升級)。

    這些參數是否相當一致,同時確定我們應用程序中的線程數量?我們是否需要查看其他參數?

回答

1

'1至1.5倍核心數量' - 這看起來是OS /語言相關的。例如,在Windows/C++中,如果有大量CPU密集型任務,則最優化似乎要比性能分佈非常小的內核數量多兩倍。如果這樣的環境,看起來你可能只是分配一個池中的64個線程,而不會打擾核心的數量。

'查詢/查詢-Ack和響應/響應 - ack模型,時間不能浪費在I/O等待狀態中' - 這對於大多數網絡具有高延遲的協議是不可避免的。延遲是由'乒乓'協議&強制執行的,所以不可避免地會有I/O等待。異步I/O只是將這種等待轉移到內核 - 它仍然存在!

對動態內存的大量需求,它比線程更適合處理更多的進程 - 並非如此。 「對動態內存的大量需求」通常意味着大數據緩衝區將被移動。大型緩衝區只能通過引用有效地移動。由於共享內存空間,這在線程之間非常簡單快捷。通過流程,你會陷入尷尬和緩慢的進程間通信。

'確定我們應用程序中的線程數量' - 好吧,在幾個方面很困難。給定一個未知的架構,設計。語言和操作系統,我唯一的建議是嘗試儘可能靈活和可配置地構建一切。如果您有線程池,請將其大小設置爲可調整的運行時參數。如果您有對象池,請嘗試設計它,以便您可以更改其深度。有一些默認值可用於測試框,然後在安裝時或運行時,可以對特定系統進行任何特定的更改和調整。

靈活/可配置設計的另一件事情是,你可以,在測試時,調整路程,修復許多建築師,設計師,開發商和,最重要的是,客戶

做出不正確的決策,假設和瞎猜
+0

感謝馬丁..但爲什麼操作系統有它的作用?是否因爲指令(調度等)的最終執行順序取決於操作系統?我猜想,管道襯裏和無序執行是硬件線程的屬性..請糾正我,如果我錯了.. – 2012-04-13 10:39:53

+0

OS是界面的基礎。不可避免地,性能差異將浮出水面。其中之一是調度算法。線程調度的最終順序取決於操作系統,是的。管道襯裏和無序執行是硬件優化,是的。 – 2012-04-13 10:47:59

+0

再一次感謝..想想我最好的前進方向是開放性的想法...... :) – 2012-04-13 10:53:26