什么是CPU密集型、IO密集型?「建议收藏」

什么是CPU密集型、IO密集型?「建议收藏」CPU密集型(CPU-bound)CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPULoading100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPULoading很高。在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPUbound。例如一个计……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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密集型适合脚本语言开发的多线程。

推荐阅读

Spring Boot 最新教程,太全了!

1,000+ 道 Java面试题及答案整理(最新版)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194348.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python和java哪个更值得入手-Python和Java该如何选择?选哪个好?[通俗易懂]

    python和java哪个更值得入手-Python和Java该如何选择?选哪个好?[通俗易懂]在这里为大家介绍一下,其实Python和Java是两种截然不同的编程语言,两者都算是互联网行业中主流的编程语言,不过两者使用起来都是非常好用的,当然要看自己的需求,接下来为大家简单的区分一下Python和Java。Java和Python该如何选择?可以通过以下几个方面来决定:1、从语法结构上来说,Java是面向对象的编程语言,语法结构上面更加严谨一些,不过Java的模块化存在问题。而对比Java来…

    2022年7月8日
    26
  • getline与get函数的区别

    getline与get函数的区别

    2022年1月19日
    50
  • Windows查看CUDA版本「建议收藏」

    Windows查看CUDA版本「建议收藏」方法1:进入以下目录C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA即可安装的CUDA版本方法2:打开cmd,输入nvcc–version

    2022年4月28日
    56
  • 自监督学习之对比学习

    自监督学习之对比学习对比学习一般是自监督学习的一种方式什么是自监督学习自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)。  原文作者:自编码器个人认为可以算作无监督学习,也可以算作自监督学.

    2022年9月14日
    0
  • 【安全】Web渗透测试(全流程)

    【安全】Web渗透测试(全流程)1信息收集1.1域名、IP、端口域名信息查询:信息可用于后续渗透IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常端口信息查询:NMap扫描,确认开放端口如果不会用Nmap,看这里:NMAP基础教程(功能介绍,安装,使用)发现:一共开放两个端口,80为web访问端口,3389为windows远程登陆端口,嘿嘿嘿,试一下发现:是Window…

    2022年6月29日
    27
  • java和python区别_Python和Java之间的区别:主要功能

    java和python区别_Python和Java之间的区别:主要功能java和python区别Python或Java,哪个更好?这个问题在全球开发者社区引发了许多激烈的讨论。初学者开发人员可能对应该掌握两者中的哪一个有所怀疑。初创公司和公司可能想知道哪种方案在他们的下一个项目中会更好。这两种语言都可以以相同的效率解决许多任务,这不足为奇。但是,在某些情况下,一个人可以击败另一个人。在本文中,我们将基于多个方面来分析它们的优缺点。对于那…

    2022年7月7日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号