2013-05-17 42 views
1

我有兩個不需要太多計算的IO密集型進程:一個是獲取並解析網頁,另一個是將通過解析獲得的一些數據存儲在數據庫中。在網絡抓取繼續進行的同時,這將會重複。動態優化線程數

是否有一種方法可以動態地增加和減少在每個任務上工作的線程數,因此對於整個系統運行的機器來說性能是最佳的?該方法不應涉及基準測試,因爲它將被分發到許多我事先無法訪問的機器。

請引導我一些來源或信息。

+0

一些指南http://parsec.cs.princeton.edu/publications/iiswc62-pusukuri.pdf –

+1

使用* ['FixedThreadPool'](http://docs.oracle.com/javase/7/docs/api /java/util/concurrent/Executors.html#newFixedThreadPool%28int%29)*,其他部分參見* [this](http://stackoverflow.com/questions/1980832/java-how-to-scale-threads -according-to-cpu-cores)* post。 –

回答

1

那麼動態調整線程數應該沒有問題(例如使用ThreadPoolExecutor)。

但它看起來對我來說,最佳線程數是由兩個因素的限制:

  1. 爲貴「的下載線程」的網絡帶寬
  2. 爲貴「的數據庫允許的數據庫連接的最大數目線程「

我不確定下載部分是否應該是多線程的,因爲每個線程只會從其他線程竊取帶寬,除非頁面非常小。