【问题标题】:Optimizing number of threads dynamically动态优化线程数
【发布时间】:2013-05-17 16:37:14
【问题描述】:

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

是否有一种方法可以动态地增加和减少每个任务上工作的线程数,从而使整个系统运行的机器的性能达到最佳状态?该方法不应涉及基准测试,因为它将分发到我无法事先访问的许多机器上。

请引导我找到一些来源或信息。

【问题讨论】:

标签: java multithreading io web-crawler


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2018-08-19
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多