首页 > 其他分享 >线程池调优

线程池调优

时间:2023-02-04 22:44:40浏览次数:42  
标签:池调 ST 任务 WT 线程 调优 CPU

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

  • 线程数调优
  • 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

        

标签:池调,ST,任务,WT,线程,调优,CPU
From: https://www.cnblogs.com/shan218/p/17092570.html

相关文章

  • Java 多线程学习
    Java多线程学习Thread类学习首先使类继承Thread然后创建run方法其中在线程中run主要是线程执行体在线程中new这个类然后使用start进行线程打开注:线程中是同......
  • Java多线程并发04—线程池的合理使用
    为什么使用线程池?线程池做的工作主要是控制运行的线程的数量。线程池的种类Java中常用的线程池主要有四种:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPo......
  • Java多线程并发05-锁说明
    根据锁的各种特性,可将锁分为以下几类:乐观锁/悲观锁独享锁(互斥锁)/共享锁(读写锁)可重入锁公平锁/非公平锁分段锁偏向锁/轻量级锁/重量级锁自旋锁乐观锁/悲观锁乐观锁与悲观锁并......
  • 线程变量-cnblog
    1.3.2ThreadLocalThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程......
  • 常见网络模型/线程模型
    1.连接独占线程或进程在这个模型中,线程/进程处理来自绑定连接的消息,在连接断开前不退也不做其他事情。当连接数逐渐增多时,线程/进程占用的资源和上下文切换成本会越来越大......
  • Java基于枚举类的线程池
    线程池定义(可防序列化攻击)packagecom.yang.utils;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava......
  • Qt 中多线程的使用
    前言在进行桌面应用程序开发的时候,假设应用程序在某些情况下需要处理比较复杂的逻辑,如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使......
  • Java多线程并发03—线程上下文,线程调度
    多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务正在同时进行呢?操作系统的设计者巧妙地利......
  • Java多线程并发04—线程池的合理使用
    为什么使用线程池?线程池做的工作主要是控制运行的线程的数量。线程池的种类Java中常用的线程池主要有四种:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPo......
  • 多线程事务回滚sqlSession, spring-mybatis 开启事务
    @ResourceSqlContextsqlContext;/***多线程事务.*@paramemployeeDOList*/@OverridepublicvoidsaveThread(List<EmployeeDO>employeeDOList)throwsSQL......