美文网首页
多进程与多线程与协程

多进程与多线程与协程

作者: tyssy | 来源:发表于2018-02-28 21:52 被阅读0次

python的进程线程和协程:https://www.cnblogs.com/zhang-can/p/7215506.html
进程和线程的比喻
协程的优势--知乎回答

作者:阿猫
链接:https://www.zhihu.com/question/20511233/answer/24260355
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

没有啥复杂的东西,考虑清楚需求,就可以很自然的衍生出这些解决方案。

  • 一开始大家想要同一时间执行那么三五个程序,大家能一块跑一跑。特别是UI什么的,别一上计算量比较大的玩意就跟死机一样。于是就有了并发,从程序员的角度可以看成是多个独立的逻辑流。内部可以是多cpu并行,也可以是单cpu时间分片,能快速的切换逻辑流,看起来像是大家一块跑的就行。但是一块跑就有问题了。我计算到一半,刚把多次方程解到最后一步,你突然插进来,我的中间状态咋办,我用来储存的内存被你覆盖了咋办?所以跑在一个cpu里面的并发都需要处理上下文切换的问题。进程就是这样抽象出来个一个概念,搭配虚拟内存、进程表之类的东西,用来管理独立的程序运行、切换。
  • 后来一电脑上有了好几个cpu,好咧,大家都别闲着,一人跑一进程。就是所谓的并行。因为程序的使用涉及大量的计算机资源配置,把这活随意的交给用户程序,非常容易让整个系统分分钟被搞跪,资源分配也很难做到相对的公平。所以核心的操作需要陷入内核(kernel),切换到操作系统,让老大帮你来做。
  • 有的时候碰着I/O访问,阻塞了后面所有的计算。空着也是空着,老大就直接把CPU切换到其他进程,让人家先用着。当然除了I\O阻塞,还有时钟阻塞等等。一开始大家都这样弄,后来发现不成,太慢了。为啥呀,一切换进程得反复进入内核,置换掉一大堆状态。进程数一高,大部分系统资源就被进程切换给吃掉了。
  • 后来搞出线程的概念,大致意思就是,这个地方阻塞了,但我还有其他地方的逻辑流可以计算,这些逻辑流是共享一个地址空间的,不用特别麻烦的切换页表、刷新TLB,只要把寄存器刷新一遍就行,能比切换进程开销少点。
  • 如果连时钟阻塞、 线程切换这些功能我们都不需要了,自己在进程里面写一个逻辑流调度的东西。那么我们即可以利用到并发优势,又可以避免反复系统调用,还有进程切换造成的开销,分分钟给你上几千个逻辑流不费力。这就是用户态线程。
  • 从上面可以看到,实现一个用户态线程有两个必须要处理的问题:一是碰着阻塞式I\O会导致整个进程被挂起;二是由于缺乏时钟阻塞,进程需要自己拥有调度线程的能力。如果一种实现使得每个线程需要自己通过调用某个方法,主动交出控制权。那么我们就称这种用户态线程是协作式的,即是协程。
    本质上协程就是用户空间下的线程。

自我总结:
进程:资源分配的基本单位,独立,稳定,进程间通信速度较慢,创建和切换时开销较大(相比线程)fork(),vfork()
线程:CPU调度的基本单位,“轻量级的进程”共享内存,不太稳定,线程间通信速度快,创建和切换时开销稍微小clone()
协程:用户空间的线程

并行:多核CPU共同执行
并发:单核CPU划分时间片执行

相关文章

  • python多线程、多进程、协程的使用

    python多线程、多进程、协程的使用 本文主要介绍多线程、多进程、协程的最常见使用,每个的详细说明与介绍有时间会...

  • python常用知识

    多线程,多进程,协程进程池 协程 字典 列表 函数 文件操作

  • 并发编程之Concurrent.futures vs Multi

    并发编程是刚需,尤其是在多I/O操作时,多线程,协程,多进程三路英雄各显神通。多线程,协程属于并发操作,多进程属于...

  • 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 ...

  • GO学习笔记(18) - 并发编程(1) - 理解gorouti

    目录 进程、线程与协程 并发模模型介绍 GO并发编程介绍 进程、线程与协程 进程和线程 进程是程序在操作系统中的一...

  • 多进程与多线程与协程

    python的进程线程和协程:https://www.cnblogs.com/zhang-can/p/721550...

  • Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在python...

  • Gunicorn源码分析(二)Worker进程

    Gunicorn.worker实现了不同类型的work进程,有单进程、多线程、多协程等形式。 gunicorn.w...

  • Gevent

    前述 进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在pyt...

  • Gevent简明教程

    前述 进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在pyt...

网友评论

      本文标题:多进程与多线程与协程

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