IO型密集与CPU密集型

发布时间 2023-08-01 13:35:10作者: 风叶合一

CPU密集型
一些进程绝大多数时间在计算上,即一个计算为主的程序称为计算密集型(CPU密集型)computer-bound。

多线程跑的时候,可以充分利用起所有的cpu核心,比如说4个核心的cpu,开4个线程的时候,可以同时跑4个线程的运算任务,此时是最大效率。

但是如果线程远远超出cpu核心数量 反而会使得任务效率下降,因为频繁的切换线程也是要消耗时间的。

因此对于cpu密集型的任务来说,线程数等于cpu数是最好的了。

I/O密集型
有一些进程则在input 和output上花费了大多时间,是一个磁盘或网络为主的程序,则称为I/O密集型。常见的大部分任务都是IO密集型任务,比如Web应用,以及搜索引擎蜘蛛大多时间是在等待响应这种就属于I/O密集型。

我们都知道IO的速度比起CPU来是慢到令人发指的,cpu使用率较低,程序中会存在大量I/O操作占据时间,导致线程空余时间出来,所以通常就需要开cpu核数的两倍的线程, 当线程进行I/O操作cpu空暇时启用其他线程继续使用cpu,提高cpu使用率。所以开多线程,比方说多线程网络传输,多线程往不同的目录写文件,等等。此时线程数等于IO任务数是最佳的。

通过上述可以总结出:
线程的最佳数量: 最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。
QA: IO型密集的项目架构 应该如何设计?