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

举报
西魏陶渊明 发表于 2022/09/25 03:43:23 2022/09/25
【摘要】 CPU-bound(计算密集型) 和IO bound(IO密集型) I/O bound指的是系统CPU效能相对硬盘和内存好很多,此时大部分CPU在等io的读写,此时CPU Loading不高。 CPU bound指的是系统的硬盘和内存的性能,相对于CPU的性能要好很多,此时系统运作CPU Loading 100% ,...

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。

    • 多进程优缺点
    
        
    1. 多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。多进程模式的缺点是创建进程的代价大,在Unix/Linux系统下,用fork调用还行,在Windows下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。
    • 多线程优缺点
    
        
    1. 多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程。
    2. 在Windows下,多线程的效率比多进程要高,所以微软的IIS服务器默认采用多线程模式。由于多线程存在稳定性的问题,IIS的稳定性就不如Apache。为了缓解这个问题,IIS和Apache现在又有多进程+多线程的混合模式,真是把问题越搞越复杂。

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/103031163

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。