菜鸟笔记
提升您的技术认知

cpu密集型与io密集型-ag真人游戏

cpu密集型也叫计算密集型,指的是系统的硬盘、内存性能相对cpu要好很多,此时,系统运作大部分的状况是cpu loading 100%,cpu要读/写i/o(硬盘/内存),

i/o在很短的时间就可以完成,而cpu还有许多运算要处理,cpu loading很高。

在多重程序系统中,大部份时间用来做计算、逻辑判断等cpu动作的程序称之cpu bound。

例如,一个计算圆周率至小数点一千位以下的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于cpu bound的程序。

cpu bound的程序一般而言cpu占用率相当高。这可能是因为任务本身不太需要访问i/o设备,也可能是因为程序是多线程实现因此屏蔽掉了等待i/o的时间。

io密集型指的是系统的cpu性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是cpu在等i/o (硬盘/内存) 的读/写操作,此时cpu loading并不高。

i/o bound的程序一般在达到性能极限时,cpu占用率仍然较低。这可能是因为任务本身需要大量i/o操作,而pipeline做得不是很好,没有充分利用处理器能力。

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

cpu密集型

一般来说:计算型代码、bitmap转换、gson转换等

计算密集型任务的特点是要进行大量的计算,消耗cpu资源,比如计算圆周率、对视频进行高清解码等等,全靠cpu的运算能力。

这种计算密集型任务虽然也可以用多任务完成,但是,任务越多,花在任务切换的时间就越多,cpu执行任务的效率就越低,

所以,要最高效地利用cpu,计算密集型任务同时进行的数量应当等于cpu的核心数。

计算密集型任务由于主要消耗cpu资源,因此,代码运行效率至关重要。

python这样的脚本语言运行效率很低,完全不适合计算密集型任务。对于计算密集型任务,最好用c语言编写。

io密集型

一般来说:文件读写、db读写、网络请求等

第二种任务的类型是io密集型,涉及到网络、磁盘io的任务都是io密集型任务,这类任务的特点是cpu消耗很少,

任务的大部分时间都在等待io操作完成(因为io的速度远远低于cpu和内存的速度)。

对于io密集型任务,任务越多,cpu效率越高,但也有一个限度。常见的大部分任务都是io密集型任务,比如web应用。

io密集型任务执行期间,99%的时间都花在io上,花在cpu上的时间很少,因此,用运行速度极快的c语言替换用python这样运行速度极低的脚本语言,完全无法提升运行效率。

对于io密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,c语言最差。

总之,计算密集型程序适合c语言多线程,i/o密集型适合脚本语言开发的多线程。

网站地图