什么是CPU密集型、IO密集型?

687 阅读2分钟

CPU密集型

CPU密集型也叫做计算机密集型,指的是系统的硬盘、内存性能相对CPU要好很多。系统的运作大部分的情况是CPU Loading 100%,CPU要读写,I/O在很短的时间就可以完成,而CPU还有很多运算要处理,CPU Loading很高。

IO密集型

IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时系统运作大部分情况是CPU在等待I/O操作此时CPU Loading并不高。
在IO密集的程序一般在达到性能极限时,CPU占用率仍然较低。这可能是因为任务本身需要大量IO操作。

CPU密集型 vs IO密集型

我们可以把任务分为计算密集型和IO密集型

计算密集型任务的特点就是要进行大量的计算,消耗CPU资源,比如对视屏进行高清解码、计算圆周率等等,全靠CPU的运算能力。这种密集型任务虽然也可以多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应等于CPU的核心数。

计算密集型主要消耗CPU资源,代码运行效率至关重要,python这样的脚本语言运行效率极低,完全不适合计算密集型任务,对于计算密集型任务,最好使用c语言进行编写。

第二种就是IO密集型任务,涉及网络、硬盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都是在等待IO操作的完成(这是因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如WEB应用。

IO密集型任务执行期间,99%的时间都花在了IO上,花在CPU的时间上极少。因此,用运行速度极快的C语言替换python这样运行速度极低的脚本语言,完全无法提高运行效率。对于IO密集型任务,最合适的就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。
总之,计算密集型消耗CPU资源较快,IO密集型任务适合读写操作,比如数据库的读写操作。