2013-06-22 55 views
0

對於給定系統確定的操作,最大/正確線程數目如何使用?我有一個可以在1到100個線程中完成的操作。我可以運行一些測試並確定哪一個測試效率最高,但看起來好像很大程度上取決於用戶的系統。根據系統規格確定要使用的線程的最有效數量

有沒有這方面的先例,取決於內核數量,操作系統等?

我在C#.NET工作,但我不確定這會有所作爲。

+0

您想自定義每個用戶系統,根據關於條件(CPU負載,內存...)? – Pragmateek

回答

1

對此沒有簡單的規則,完全取決於這些線程在做什麼。如果他們正在燒核,那麼理想的數字永遠不會超過機器可用的核心數量。增加更多隻是給操作系統額外的工作來在它們之間進行上下文切換。

但是,如果他們做任何I/O,那麼他們會被阻塞很多時間,等待I/O完成。在這種情況下理想值可能更大,但完全取決於I/O子系統中的併發性。

而且很少有理想只是一個。如果線程執行完全由您的計算機只有一個資源綁定的情況,則是這種情況。像內存總線或磁盤一樣。

您必須進行測量。查看Amdahl's law的維基百科文章,選擇曲線變平的數字。注意緩存效果,使其看起來像你的程序比實際上會做得更好。就像一遍又一遍地運行一個磁盤綁定程序,實際上是從文件系統緩存而不是從磁盤獲取數據。

0

在一個完美的程序中,您應該使用的線程數是您擁有的處理器的數量。

+0

那麼,一個完美的程序沒有I/O?如果它沒有I/O,你怎麼知道它是完美的? –

相關問題