CPU-bound(计算密集型) 和IO bound(IO密集型)、进程vs线程

CPU-bound(计算密集型) 和IO bound(IO密集型)

I/O bound指的是系统CPU效能相对硬盘和内存好很多,此时大部分CPU在等io的读写,此时CPU Loading不高。

CPU bound指的是系统的硬盘和内存的性能,相对于CPU的性能要好很多,此时系统运作CPU Loading 100% ,CPU要读写,I/O在很短时间完成,而CPU还有很多运算要处理,CPU Loading很高。

  • 大部分时间用来做计算和逻辑判断等CPU动作的程序称之为CPU bound。例如计算圆周率,在执行过程中绝大部分时间用在三角函数和开根号的计算,便是CPU bound程序

CPU bound的程序一般而言CPU占用率相当高。这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽掉了等待I/O的时间。
而I/O bound的程序一般在达到性能极限时,CPU占用率仍然较低。这可能是因为任务本身需要大量I/O操作,而pipeline(管道通信)做得不是很好,没有充分利用处理器能力
;还可能是因为数据局部性不是很好,导致较多page error,结果产生了大量disk I/O的开销。

==如何分辨到底是CPU还是IO bound?==

进程vs线程

  • 如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。

  • 如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。

    • 多进程优缺点
    多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。多进程模式的缺点是创建进程的代价大,在Unix/Linux系统下,用fork调用还行,在Windows下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。
    
    
    • 多线程优缺点
    多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程。
    在Windows下,多线程的效率比多进程要高,所以微软的IIS服务器默认采用多线程模式。由于多线程存在稳定性的问题,IIS的稳定性就不如Apache。为了缓解这个问题,IIS和Apache现在又有多进程+多线程的混合模式,真是把问题越搞越复杂。
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前文再续,就书接上一回,随着与Server、TCP、Protocol的邂逅,Swoole终于迎来了自己的故事,今天...
    蜗牛淋雨阅读 1,808评论 1 14
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,207评论 0 23
  • 曾经,觉得跟老公是真爱,真爱才会要二胎。结果二胎来了,老公却失职了!自从我出了月子中心,他就特别忙,先去北京学习...
    山里仁佳阅读 174评论 0 0
  • 有些人的相遇、相知似乎早已是命中注定一般! 一、我遇见了阿美 阿美是我的好朋友,也是我的好姐妹。 小时候我们生活在...
    爱笑的猫阅读 321评论 0 2
  • 年初,《我在故宫修文物》在B站上走红,吸引了众多人的目光。成於央视,红于B站,说起来也是有些好笑,但足以证明,当代...
    我乘一叶小舟阅读 958评论 1 19