1

我有两个不做太多计算的 IO 密集型进程:一个是获取和解析网页,另一个是将通过解析获得的一些数据存储在数据库中。当网络继续爬行时,这将重复。

是否有一种方法可以动态地添加和减去正在处理每个任务的线程数,以便性能对于整个系统运行的机器而言是最佳的?该方法不应涉及基准测试,因为它将分发到我无法事先访问的许多机器上。

请指导我一些来源或信息。

4

2 回答 2

2

而不是直接使用线程,您应该只创建一个ThreadPool向其中添加一些Runnable执行实际工作的 s 。根据您的描述,CachedThreadPool可能是合适的。查看http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html了解如何实施的一些指南。

于 2013-05-17T17:00:43.647 回答
1

那么动态调整线程数应该没问题(例如使用ThreadPoolExecutor )。

但在我看来,最佳线程数受到两个因素的限制:

  1. “下载线程”的网络带宽
  2. “数据库线程”允许的最大数据库连接数

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

于 2013-05-17T16:52:17.350 回答