CPU密集型 VS IO密集型

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

I/O bound的程序一般在达到性能极限时,CPU占用率仍然较低。这可能是因为任务本身需要大量I/O操作,而pipeline做得不是很好,没有充分利用处理器能力。
例如查询数据库,请求网络资源,读写文件,web应用通常如此
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密集型适合脚本语言开发的多线程
点赞
收藏
评论区
推荐文章
马丁路德 马丁路德
3年前
浅谈 vue 前端同构框架 nuxt 及其性能优化
前言使用nuxt.js做项目也接近快一年了,从立项到内测、公测、再到正式上线,还有后面的不断维护,也陆陆续续的踩了很多坑,其中最大的问题就是node的渲染性能问题了。模板转换是cpu密集型的操作,node又是单线程的,并发一高,cpu就会飙到100%。为了提
CuterCorley CuterCorley
3年前
商业数据分析从入门到入职(5)Python基本语法和数据类型
一、从计算机到Python1.计算机与程序思维计算机最核心的三个部分为CPU、内存和硬盘,都在主板上面,除此之外,还包括键盘、鼠标等输入设备和屏幕等输出设备,如下:CPU用于进行计算,硬盘用于存储数据和文件,内存(包括缓存)用于连接CPU和硬盘,作为两者的缓冲,可以加快读取和处理速率。冯·诺依曼架构如下:程序是指定如何执行计
Wesley13 Wesley13
2年前
CPU 缓存一致性协议 MESI
CPU高速缓存(CacheMemory)CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU
Stella981 Stella981
2年前
Redis 子进程开销监控和优化方式
Redis子进程负责AOF或者RDB文件的重写,它的运行过程主要涉及CPU、内存、硬盘三部分的消耗01 CPUCPU开销分析。子进程负责把进程内的数据分批写入文件,这个过程属于CPU密集操作,通常子进程对单核CPU利用率接近90%CPU消耗优化。Redis是CPU密集型服务,不要做绑定单核CPU操作。由于子进程非常消耗
Stella981 Stella981
2年前
Node.js 多进程处理CPU密集任务
Node.js单线程与多进程大家都知道Node.js性能很高,是以异步事件驱动、非阻塞I/O而被广泛使用。但缺点也很明显,由于Node.js是单线程程序,如果长时间运算,会导致CPU不能及时释放,所以并不适合CPU密集型应用。当然,也不是没有办法解决这个问题。虽然Node.js不支持多线程,但
Wesley13 Wesley13
2年前
Java多线程之线程池配置合理线程数
目录代码查看公司服务器或阿里云是几核的合理线程数配置之CPU密集型合理线程数配置之IO密集型1\.代码查看公司服务器或阿里云是几核的要合理配置线程数首先要知道公司服务器或阿里云是几核的代码查看服务器核数:System.out.println(Runtime.getRuntime().availableProc
京东云开发者 京东云开发者
6个月前
别再纠结线程池池大小、线程数量了,哪有什么固定公式 | 京东云技术团队
可能很多人都看到过一个线程数设置的理论:CPU密集型的程序核心数1I/O密集型的程序核心数2不会吧,不会吧,真的有人按照这个理论规划线程数?线程数和CPU利用率的小测试抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一
流浪剑客 流浪剑客
6个月前
Macos系统监控工具:iStat Menus for mac密钥激活 中文版 支持M1
是一款Mac上的硬件信息检测软件,能够实时监控计算机的CPU、GPU、内存、硬盘、网络、温度、电池以及系统时间等各个方面的信息。通过iStatMenus,用户可以在菜单栏实时查看Mac电脑的运行状态,包括CPU使用率、内存占用情况、硬盘读写速度、网络连接状
白云朵朵飘过 白云朵朵飘过
5个月前
Macos系统监控工具:iStat Menus for mac中文版 支持M1
iStatMenus是一款Mac上的硬件信息检测软件,能够实时监控计算机的CPU、GPU、内存、硬盘、网络、温度、电池以及系统时间等各个方面的信息。通过iStatMenus,用户可以在菜单栏实时查看Mac电脑的运行状态,包括CPU使用率、内存占用情况、硬盘
黄忠 黄忠
2个月前
C++从0实现百万并发Reactor服务器-完整版
C从0实现百万并发Reactor服务器完整版download》https://www.sisuoit.com/4703.html并发Reactor模式:高效处理I/O密集型任务在现代的分布式系统和互联网应用中,I/O密集型任务的处理是一个常见的挑战。为