美文网首页
IO密集型任务, 计算密集型任务, 多线程, 多进程.

IO密集型任务, 计算密集型任务, 多线程, 多进程.

作者: Silence_王凯 | 来源:发表于2018-03-23 14:33 被阅读0次

    IO密集型任务, 计算密集型任务, 多线程, 多进程.

    IO 密集型任务, 是指磁盘 IO、网络 IO 占主要的任务, 计算量很小。比如请求网页, 读写文件等.

    计算密集型任务, 是指 CPU 计算占主要的任务, CPU 一直处于满负荷状态. 

    多线程:

       多线程即在一个进程中启动多个线程执行任务. 一般来说使用多线程达到并行的目的, 但由于 Python 中使用了全局解释锁 GIL 的概念, 导致 Python 中的多线程并不是并行执行, 而是 "交替执行".  所以 Python 中的多线程适合 IO 密集型任务, 而不适合计算密集型任务.

    多进程:

    由于 Python 中 GIL 的原因, 对于计算密集型任务, Python 下比较好的方式是使用多进程, 这样可以非常有效的使用 CPU 资源。当然同一时间执行的进程数量取决于你电脑的 CPU 核心数.

    举个例子:

    1. 单进程单线程: 一个人在一个桌子上吃菜.

    2.单进程多线程: 多个人在同一个桌子上吃菜.

    3.多进程单线程: 多个人每个人在自己的桌子上吃菜.

    多线程的问题是多个人同时吃一道菜的时候容易发生争抢, 例如两个人同时夹一个菜, 一个人刚伸出筷子, 结果伸到的时候被别人夹走了。资源共享就会发生冲突争抢.

        ---对于 windows 来说, [开桌子]的开销很大, 因此 windows 鼓励大家在一个桌子上吃菜. 因此 windows 多线程的学习重点是要大量面对资源争抢与同步方面的问题.

        ---对于 Linux 来说, [开桌子]的开销很小, 因此 Linux 鼓励大家在一个桌子上吃菜. 这带来的新问题是: 坐在两张不同桌子上, 说话不方便. 因此: Linux 下的学习重点是要学习进程间通讯的方法.

    ###[开桌子] 是指创建进程.

    相关文章

      网友评论

          本文标题:IO密集型任务, 计算密集型任务, 多线程, 多进程.

          本文链接:https://www.haomeiwen.com/subject/eqzpqftx.html