线程池调优

线程池调优主要包括两方面

  • 线程数调优
  • BlockingQueue调优

线程数调优

  一般根据任务类型进行调优。增删改查类任务一般属于IO密集型任务,但大部分任务都属于混合型任务。

  • CPU密集型任务

    经验公式:线程数 = CPU核心数 + 1

    为什么要设置成 核心数+1 ?理想情况是设置成核心数,这样每个核都在计算,避免线程切换导致开销。但一般会出现中断等情况,这样就会有核心空闲,所以一般设置成 核心数+1 ,以最大程度利用CPU资源。

    Java中可以通过Runtime.getRuntime().availableProcessors()获取CPU核心数。

  • IO密集型任务

    经验公式:线程数 = 2 * CPU核心数

  • 混合型任务

    经验公式:线程数 = N * U * ( 1 + WT/ST )

      • N:CPU核心数
      • U:目标CPU利用率
      • WT:线程等待时间
      • ST:线程运行时间

    N和U都很容易获得和设置。WT和ST可以在运行项目后,在终端输入jvisualvm,启动该工具,选中该项目并切换到Profiler标签下进行查看。自用时间即为ST,总时间 - 自用时间即为WT。

    

BlockingQueue调优

  估计单个任务占用内存 以及 确定线程池计划占用内存后即可计算设置BlockingQueue大小。

工具

  在实际调优过程中,也可通过下面链接中提供的工具对任务运行进行监测,工具会自动计算出适合的线程数和BlockingQueue的大小。

  https://www.javacodegeeks.com/2012/03/threading-stories-about-robust-thread.html

        

posted @ 2023-02-04 22:35  悠点一寺  阅读(292)  评论(0)    收藏  举报