2013-05-17 70 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. 为贵“的数据库允许的数据库连接的最大数目线程“

我不确定下载部分是否应该是多线程的,因为每个线程只会从其他线程窃取带宽,除非页面非常小。