首页 > 其他分享 >线程池配置与CPU利用率

线程池配置与CPU利用率

时间:2024-07-28 10:24:32浏览次数:17  
标签:核心 利用率 线程 测试 text CPU

线程数设置理论
  • CPU密集型:核心数 + 1
  • I/O密集型:核心数 * 2
CPU利用率基础
  • 单个CPU核心在单位时间内只能执行一个线程的指令。
实验验证
  • 死循环测试:单线程可跑满一个核心利用率。
  • 多线程测试:增加线程数,核心利用率上升,但超过核心数后,系统负载增加。
线程切换成本
  • 切换线程涉及寄存器更新、内存页表更新等,频繁切换导致性能下降。
I/O操作对CPU利用率的影响
  • I/O操作期间,CPU空闲,操作系统可调度执行其他线程,提高利用率。
线程数与CPU利用率关系
  • 极端线程可占满核心,多核心CPU最多同时执行核心数的线程。
  • 超过核心数的线程数导致频繁切换,增加系统负载。
线程数计算公式
  • 来自《Java 并发编程实战》。
  • 公式:[ \text{线程数} = \text{核心数} \times \text{利用率} \times (1 + \frac{\text{等待时间}}{\text{计算时间}}) ]
实际线程数规划
  • 无固定答案,需根据预期目标(CPU利用率、负载、GC频率等)通过测试调整。
  • 考虑主机其他进程、JVM进程中的线程干扰。
测试流程
  1. 分析主机和其他进程干扰。
  2. 分析JVM进程中的线程。
  3. 设定目标CPU利用率、GC频率/暂停时间、执行效率等。
推荐线程数
  • 对于简单异步场景,推荐使用CPU核心数作为线程数。
总结
  • 线程数设置需结合实际场景和目标,通过测试找到最合适的配置。
  • 考虑主机和JVM进程中的其他线程对CPU资源的影响。
  • 通过不断测试和调整,达到预期的CPU利用率和系统性能。

个人思考

  • 线程数配置并非一成不变,需根据实际应用场景和性能要求进行调整。
  • 理解CPU和线程的工作机制有助于更合理地配置线程池。
  • 实际应用中,应避免过度依赖理论公式,重视实际测试和性能监控。

标签:核心,利用率,线程,测试,text,CPU
From: https://blog.csdn.net/modelsetget/article/details/140747511

相关文章

  • 学习【线程池】原理知识这一篇就够了
    线程池线程池原理知识1.线程池基础线程池是什么线程池解决了什么问题2.线程池核心设计与实现总体设计生命周期管理任务执行机制Worker线程管理3.线程池在业务中的实践业务背景实际问题及方案思考4.动态化线程池设计方案动态修改配置线程池信息监控线程池告警通知......
  • Clickhouse服务器CPU 99.99%的处理过程
    进入服务器,查询正在执行任务的语句SELECTquery_id,user,queryFROMsystem.processes;--通过上面指令获取到进程相关信息后,可以用query_id条件kill进程KILLQUERYWHEREquery_id='67cadc87-34b2-4b81-8f8c-087485c922af'--杀死default用户下的所有进程KILLQUERY......
  • JavaEE 初阶(8)——多线程6之线程安全下-->volatile
    之前,我们在 JavaEE初阶(6) 这篇文章中,谈到过引起线程不安全的原因,初步了解了 “可见性” “Java内存模型” “指令重排序”,本章讲解volatile会涉及到这三个知识点,详细内容可以参考  JavaEE初阶(6) 这篇文章。目录一. 引入二.volatile关键字 a.保证“可......
  • JavaEE 初阶(7)——多线程5之线程安全中 -->“死锁”
    目录一.什么是“死锁”二.产生死锁的场景  场景1:一个线程连续加锁 场景2:两个线程两把锁场景3:N个线程M把锁 三.产生死锁的四个必要条件(缺一不可)四. Java标准库中的线程安全类一.什么是“死锁”并非是synchronized就一定线程安全,还要看代码具体咋写。到底......
  • JavaEE 初阶(9)——多线程7之 wait 和 notify
    目录一.监视器锁与监视器二.wait()  三.notify()和notifyAll()3.1notify() 3.2notifyAll()3.3wait等待 和sleep休眠的对比(面试题)wait(等待)/notify(通知)由于线程在操作系统上是“随机调度,抢占式执行”的,因此线程之间执行的先后顺序难以预知。但是......
  • 多线程实现阻塞队列
    今天面试被问到了,多线程实现阻塞队列,记录一下。1importjava.util.LinkedList;2importjava.util.Queue;3importjava.util.concurrent.locks.Condition;4importjava.util.concurrent.locks.ReentrantLock;56publicclassFixedSizeBlockingQueue<T>{7......
  • 收藏多年的线程安全问题大全笔记(1),笔记一生一起走,那些日子不再有
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 【模型训练-1】【Windows-PaddleOCR-ocr模型训练(CPU)】数据标注
    模型训练使用ocr的使用对硬件设备有比较高的依赖。网上下的模型没有GPU的加持识别效率不高,完成自有模型的训练在相同硬件设备的基准上能大大提高识别效率,加速脚本执行效率。看一组数据:训练了自己的模型识别耗时1000ms,相同的图片网上随便下的模型4000ms接下来可以根据......
  • RT-Thread多线程
    RT-Thread启动流程分析线程的状态初始状态:线程刚开始创建,还没开始运行时就处于,初始状态。就绪状态:在就绪状态下,线程按照优先级排队,等待被执行。运行状态:线程正在运行,在单核系统中,只有rt_thread_self()函数返回的线程处于运行状态,但多核系统下,运行的线程不止一个。......
  • 计算机组成原理基础第5讲 CPU系统
    计算机组成原理基础第5讲CPU系统考点一:CPU的功能和组成1.CPU的功能2.CPU的组成与结构系统总线CPU的内部结构3.CPU中的数据通路4.CPU中的寄存器用户可见控制和状态寄存器PC程序计数器用于存放下一条执行指令的地址IR指令寄存器用......