我需要從網站上抓取數據。 我有超過1000個需要訪問的鏈接,之前我將鏈接分成10個線程,並且每個線程都會啓動100個線程。在少數測試用例之後,100個線程是減少檢索內容所需時間的最佳計數爲所有鏈接。我發現.NET 4.0爲開箱即用的多線程提供了更好的支持,但是這是基於您擁有多少內核來完成的,這在我的情況下並不會產生足夠的線程。我想我問的是:什麼是優化1000鏈路拉動的最佳方式。我是否應該使用.ForEach
並讓Parallel
擴展控制產生的線程數量,或者找到一種方法告訴它有多少個線程來啓動和分配工作?Parallel.ForEach/Multithreading的最佳使用
我之前沒有與Parallel
一起工作過,所以也許我的方法可能是錯誤的。
從網站拉鍊接不是一個CPU綁定的任務,因此增加大量的線程可能不會幫助你多少。另外,在大多數當前的硬件上產生100個線程是一個壞主意。看看這個異步。 – 2013-02-08 16:52:37
@BrianRasmussen:對於嚴重網絡IO綁定任務,這不一定是真的。只要線程池沒有耗盡,允許更多的併發請求可能是一件好事。如果您有100個線程並且平均響應時間爲1秒,那麼單個核心繫統上每秒最多隻有100次上下文切換,或者在四核系統上最多隻有25次。當然,這些都是假設的數字,但看起來OP已經嘗試了各種參數,並確定了最適合他的用例和硬件的參數。 – 2013-02-08 16:54:18
@EricJ。這就是爲什麼我說「可能」。無論如何,我仍然會在啓動100個線程之前使用異步解決方案。 – 2013-02-08 16:56:47