专栏名称: Java知音
专注于Java,推送技术文章,热门开源项目等。致力打造一个有实用,有情怀的Java技术公众号!
今天看啥  ›  专栏  ›  Java知音

线程池不再乱配线程数了

Java知音  · 公众号  ·  · 2024-09-06 10:05
    

主要观点总结

本文介绍了关于线程数量设置的讨论,包括CPU密集型程序、I/O密集型程序的线程数设置理论以及实际测试结果的分享。

关键观点总结

关键观点1: 线程数量与CPU利用率的关系

一个CPU核心在单位时间内只能执行一个线程的指令。过多的线程可能导致频繁的上下文切换,影响执行效率。通过调整线程数量,可以影响CPU的利用率。

关键观点2: I/O操作对CPU利用率的影响

在程序中插入I/O操作,如读写文件、网络收发报文等,可以充分利用CPU的空闲期,提高CPU的利用率。频繁的I/O操作可能导致CPU空闲时间增加,从而允许操作系统调度更多的线程执行。

关键观点3: 线程数规划的公式与实际应用的差异

在实际业务系统中,线程数的规划没有固定答案。需要结合实际场景和目标,通过测试来找到一个最合适的线程数。其他正在运行的进程和线程也会对CPU资源产生影响,因此需要综合考虑这些因素。


文章预览

线程到底设置数量多少合适 网上有很多文章说设置线程数的理论(个人不信): CPU密集型的程序 - 核心数 + 1 I/O密集型的程序 - 核心数 * 2 CPU利用率 在分析线程数之前,先说一个基本的理论: 一个CPU核心,单位时间内只能执行一个线程的指令 那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。 来写个死循环空跑的例子验证一下: public   class   CPUUtilizationTest {     public   static   void   main (String[] args) {       //死循环,什么都不做       while ( true ){      } }} 运行这个例子后,来看看现在CPU的利用率: 从图上可以看到,我的3号核心利用率已经被跑满了 那基于上面的理论,我多开几个线程试试呢? public   class   CPUUtilizationTest {       public   static   void   main (String[] args) {           for ( int  j = 0 ; j  < 6 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览