2010-04-10 31 views

回答

1

如果你有兩個不依賴於另一個的不同序列的事件,那麼考慮它。如果你必須編寫一堆邏輯來確保兩個操作不會以其他方式進行,那麼通過使兩段代碼更清晰可以得到回報。

另一方面,如果你發現在嘗試創建多線程的東西時,必須添加gobs的代碼來在線程之間傳遞結果,因爲一個(或兩者)不能在沒有來自另一個,這是一個很好的跡象,表明你正在努力使它們在不是有意義。在有意義去多線程,甚至當你必須添加通信做

一種情況,就是當你有需要留下可供輸入一個任務,而另一個從事繁重的計算。一個線程可以輪詢從什麼地方輸入,當沒有爲阻止可用,所以,當輸入可用它在及時迴應,和飼料工作到另一個「工人」線程,以便繼續處理在任何時候,不只是當有投入時。

另一件需要考慮的事情是,即使某項工作是「令人尷尬的並行」(即需要很少或根本不需要並行化部分之間的通信),也存在多線程可能不值得的情況。如果您的CPU可以將不同的線程分配給不同的內核,多線程將允許您通過允許多個內核同時咀嚼工作來加快速度。但是在單核心處理器上,甚至是多核心處理器上,如果有多個線程,都不會加速實現,因爲一個核心仍然需要完成所有工作。

1

圖像處理常常是由CPU的約束。但是,如果您的圖像處理API已經被設計爲利用多個cpus,多線程可能無法幫助您。我通常考慮的用於快速確定多線程是否有用的策略是編寫一個簡單的程序,一次又一次地執行相關處理。然後,我將在一組數據上運行它,然後同時運行該進程的兩個實例,每個實例都有一半的數據。沒有必要確保這種測試的數據均衡;如果一個進程耗盡,它將只剩下一個實例。定時是通過掛鐘時間完成的。我的意思是字面意思;選擇足夠大的數據集,至少需要一整分鐘才能運行,但理想情況下需要5分鐘或更長時間)。

如果在同一時間運行兩個副本提高吞吐量顯著,多線程可能是一個好主意。顯然,這種策略在某些情況下是可行的,在某些情況下,多線程可以通過這種技巧無法模擬的方式來利用共享輸出。但是,這是一個非常簡單的測試,並且很少需要編寫很多(如果有的話)代碼。

相關問題