CPU-bound(计算密集型) 和I/O bound(I/O密集型)

概念

  概念I/O系统,英文全称为“Input output system”,中文全称为“输入输出系统”,由输入输出控制系统和外围设备两部分组成,是计算机系统的重要组成部分。在计算机系统中,一般把处理器和主存储器以外的部分称为输入输出系统。针对不一样的操做对象,能够划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Direct I/O、数据库I/O等,只要具备输入输出类型的交互系统均可以认为是I/O系统,也能够说I/O是整个操做系统数据交换与人机交互的通道,这个概念与选用的开发语言没有关系,是一个通用的概念。数据库

O调用步骤

  1. 进程向操做系统请求数据 ;
  2. 操做系统把外部数据加载到内核的缓冲区中,而后再把内核的缓冲区拷贝到进程的缓冲区。(关于内核的缓冲区与进程的缓冲区详情请查看《底层原理,用户缓存区和内存缓存区》)
  3. 进程得到数据完成本身的功能 ;

  当操做系统在把外部数据放到进程缓冲区的这段时间(即上述的第二步),若是应用进程是挂起等待的,那么就是同步IO,反之,就是异步IO缓存

I/O密集型 (CPU-bound) 

I/O密集型 

  指的是系统的CPU效能相对硬盘/内存的效能要好不少,此时,系统运做,大部分的情况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。网络


计算密集型

  指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好不少,此时,系统运做,大部分的情况是 CPU Loading 100%,CPU 要读/写 I/O (硬盘/内存),I/O在很短的时间就能够完成,而 CPU 还有许多运算要处理,CPU Loading 很高。在多重程序系统中,大部份时间用来作计算、逻辑判断等CPU动做的程序。例如一个计算圆周率至小数点一千位如下的程序,在执行的过程中绝大部份时间用在三角函数和开根号的计算,即是属于CPU bound的程序。多线程

计算密集型 vs. IO密集型

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

计算密集型任务因为主要消耗CPU资源,所以,代码运行效率相当重要。Python这样的脚本语言运行效率很低,彻底不适合计算密集型任务。对于计算密集型任务,最好用C语言编写。函数

IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间不多,所以,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,彻底没法提高运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。spa

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

相关文章
相关标签/搜索