首页 > 其他分享 >什么是CPU密集型、IO密集型?

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

时间:2023-01-28 15:14:37浏览次数:32  
标签:IO bound 任务 密集型 计算 CPU

CPU密集型(CPU-bound)

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密集型(I/O bound)

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

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

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语言最差。

总之,计算密集型程序适合C语言多线程,I/O密集型适合脚本语言开发的多线程。

标签:IO,bound,任务,密集型,计算,CPU
From: https://www.cnblogs.com/Acaak/p/17070313.html

相关文章

  • Linux系统编程-文件IO
    文件IO标准库IO函数和linux系统调用IO函数的区别:标准C库的文件IO函数是跨平台的,在不同的平台上调用不同的系统API标准C库的IO函数有缓冲区,而linux系统调用的没有缓......
  • Vue3数据对接报错(Unhandled error during execution of render function )
    如图:、 意思就是说:多了个value,在渲染div的时候,一些部分不应该有value查看一下传输数据的时候中间是否有null值的,或者无效值 ......
  • 后端跨域问题导致java.io.IOException: UT010029: Stream is closed解决办法
    转载自:https://blog.csdn.net/qq_45925197/article/details/126708024背景下载文件压缩成zip包接口,postman自测没问题,但在和前端联调的时候前端就会出现如下跨域的报错......
  • minio分布式存储的go语言开发衔接
    minio是分布式存储,可集群部署,阵列磁盘,纠错码等大数据存储必备的技术。由于它是go语言开发的,我们用go来与它衔接:上传文件,比如图片,然后预览。这里涉及几个重要的知识点。一......
  • CPU流水线竞争解决方案
    增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。帮助CPU解决取指令和访问数据之间的资源冲突。就像是在软件开发过程,发现效率不够,于是研发负......
  • JDK版本对应其major version
    JDK版本 major.minorversionJavaSE6 50JavaSE7 51JavaSE8 52JavaSE9 53JavaSE10 54JavaSE11 55JavaSE12 56JavaSE13 57JavaSE14 58JavaSE15 59JavaS......
  • 引子 - 实现轻量的 ioc 容器
    IoC反转控制原则也被叫做依赖注入DI,容器按照配置注入实例化的对象.假设A的相互依赖关系如下图,如何将A对象实例化并注入属性.本文将实现一个轻量化的IoC......
  • js中function的写法
    js文件中function的写法//Js代码functionfoo(){console.log('helloworld');}foo();//用匿名函数:varfoo=function(){console.log('helloworld')......
  • dremio ClusterCoordinator 服务简单说明
    dremioClusterCoordinator主要是处理集群任务协商的,比如那些服务可以在什么节点上运行,以及对于查询具体这么执行,对于元数据应该如果存储以及元数据如何进行刷新,同时还包含......
  • 【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践
    作者:京东科技 张宪波、张静、李东江基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重......