【线程池下篇】IO密集型 VS CPU密集型
程序员文章站
2022-03-20 12:56:03
先来思考一个问题,线程数量是不是越多越好,我们都知道线程的出现是为了帮忙干活,就像生活中你找人帮你干活你得给人家开工钱,那肯定不是越多越好,计算机中,线程的创建同样需要本钱;不是越多越好,那应该怎么设计呢?根据需求来,看你的需求是怎样的;第一种情况: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
上一篇: 【php设计模式】装饰器模式
下一篇: 真蛋疼