2010-05-07 28 views
2

假設我必須生成一堆結果文件,並且希望儘快完成。每個結果文件獨立於任何其他結果文件生成;實際上,可以說每個結果文件對每個其他結果文件都是不可知的。用於生成每個結果文件的資源也是唯一的。我怎樣才能動態地決定同時運行的最佳線程數目,以最大限度地減少整體運行時間?我唯一的選擇是編寫自己的線程管理器來觀察性能計數器並進行相應的調整,或者是否存在已經實現這一點的一些實體類?最大化線程數量以充分利用所有可用資源而不會影響整體性能

+1

請注意,您不僅受到CPU的限制,還受到磁盤讀寫速度 – Amirshk 2010-05-07 19:28:04

回答

4

沒有進一步的細節我會假設這個任務是I/O綁定,而不是CPU綁定,所以你可能只會增加我啓動多個線程的開銷。我會建議使用異步I/O,從而讓線程池處理細節。誠然,這可能不是最佳的解決方案,但它仍然是我的第一次嘗試,因爲它可能足夠好。

1

我會去做線程池和可能的異步文件操作。編寫自己的線程管理器很可能會比默認調度程序爲您做的更糟糕。

Here's a nice article顯示了一些你自己做的問題......你的代碼將不得不考慮像HyperThreading(它只給你虛擬CPU,而不是真正的核心,這樣的負載並不總是如預期的當看性能計數器)。

1

以多線程的方式做這件事真的不僅僅是導致上下文切換開銷?除非你有多張光盤寫入,否則不管你扔了多少個線程,你一次只能寫一張。

相關問題