欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【线程池下篇】IO密集型 VS CPU密集型

程序员文章站 2022-06-28 15:30:44
先来思考一个问题,线程数量是不是越多越好,我们都知道线程的出现是为了帮忙干活,就像生活中你找人帮你干活你得给人家开工钱,那肯定不是越多越好,计算机中,线程的创建同样需要本钱;不是越多越好,那应该怎么设计呢?根据需求来,看你的需求是怎样的;第一种情况:cpu密集型如果你的程序是以计算为主,多线程在运行的时候,可以充分利用CPU,假设你有五个核心cpu,当你有五个线程时,此时一人一个,资源得到了最大效率的利用,如果你有五个CPU,10个线程,这样,运行线程的创建过程和运行的切换过程都需要浪费资源,就得不偿...

先来思考一个问题,线程数量是不是越多越好,我们都知道线程的出现是为了帮忙干活,就像生活中你找人帮你干活你得给人家开工钱,那肯定不是越多越好,计算机中,线程的创建同样需要本钱;不是越多越好,那应该怎么设计呢?
根据需求来,看你的需求是怎样的;

第一种情况:cpu密集型

如果你的程序是以计算为主,多线程在运行的时候,可以充分利用CPU,假设你有五个核心cpu,当你有五个线程时,此时一人一个,资源得到了最大效率的利用,如果你有五个CPU,10个线程,这样,运行线程的创建过程和运行的切换过程都需要浪费资源,就得不偿失了
结论在CPU密集型中,线程数=cpu数最合适,
适合场景:运算较多、业务逻辑较复杂

第二种情况:IO密集型

计算较少CPU 使用率较低,是一个磁盘或网络为主的程序,,程序中会存在大量的 I/O 操作占用时间,导致线程空余时间很多,如果你只有一个线程,这个线程在IO等待状态,就没有线程可用了,所以上面的那种一对一就不合适了,一个等待一个在cpu里面运行,这时cpu也没空着,线程还都用上了,
结论:CPU核心数×2=线程数。当线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率。

线程等待时间所占比例越高,需要的线程数越多(因为其他线程继续使用CPU,CPU的利用率就提高了),反之则反

本文地址:https://blog.csdn.net/chris__x/article/details/107334754