如何设置线程池大小

线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。在代码中通常不会固定线程池的大小, 如果线程池过大,那么大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能耗尽资源。如果线程池过小,那么将导致许多空闲的处理器无法执行工作,从而降低吞吐率。

线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。在代码中通常不会固定线程池的大小, 如果线程池过大,那么大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能耗尽资源。如果线程池过小,那么将导致许多空闲的处理器无法执行工作,从而降低吞吐率。

要想合理地配置线程池,就必须首先分析任务特性,可以从以下几个角度来分析:

  • CPU密集型任务:CPU密集型任务应配置尽可能小的线程,如配置N cpu +1个线程的线程池;

  • IO密集型任务: IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*N cpu;

  • 混合型的任务:如果可以拆分,将其拆分成一个CPU密集型任务 和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐量将高于串行执行的吞吐量。如果这两个任务执行时间相差太大,则没必要进行分解。

    可以通过 Runtime.getRuntime().availableProcessors()方法获得当前设备的CPU个数。

当任务需要某种通过资源池来管理的资源时,例如数据库连接,那么线程池和资源池的大小将会相互影响。如果每个任务都需要一个数据库连接,那么连接池的大小就限制了线程池的大小。同样,当线程池中的任务是数据库连接的唯一使用者时,那么线程池的大小又将限制连接池的大小。attachments-2020-11-b0jzTX0b5fb638c529beb.png


  • 发表于 2020-11-19 17:20
  • 阅读 ( 22 )

0 条评论

请先 登录 后评论
热爱技术的小仓鼠
热爱技术的小仓鼠

145 篇文章

作家榜 »

  1. NX小编 1233 文章
  2. 58沈剑 311 文章
  3. 热爱技术的小仓鼠 145 文章
  4. 奈学教育 139 文章
  5. 李希沅 | 奈学教育 41 文章
  6. 江帅帅 | 奈学教育 29 文章
  7. 林淮川 | 奈学教育 12 文章
  8. 邱鹏超 3 文章