线程、进程、协程概念辨析

ε祈祈猫儿з 提交于 2020-03-11 16:26:49
  • 线程和进程

    线程、进程经常放在一起对比:

    《线程||进程||行程||多线程||多进程一次搞清》

    《IO密集型任务(多线程)||计算密集型(多进程)》

    线程是最小单位,进程内至少包含一个线程

    对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。

    进程间的切换(涉及栈、寄存器、虚拟内存、文件句柄等)开销较大,但是相对安全;不同进程通过进程间通讯来通信。

    线程是比进程更小的、CPU调度和分派的、能独立运行的基本单位,可与同属一个进程的其他的线程共享进程所拥有的全部资源;线程间通信主要通过共享内存

  • 协程概念

    协程,英文名***Coroutine***。

    协程是一种用户态的轻量级线程,协程的调度完全由用户控制,拥有自己的寄存器上下文和栈。

    一台机器只执行一个程序太浪费CPU资源了,当某个程序执行IO时就让出CPU资源交给另一个程序执行,这就是协程的思想

    协程是实现异步的一种方式。

    从编程角度,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制。

  • 协程与线程/进程的区别

    • 编译器与操作系统

      协程编译器级的,Process和Thread是操作系统级的。

      操作系统级的意思是对算法的调度是通过OS执行的,每次跑到OS分配的CPU时间后就会被OS强制挂起,开发者无法精确控制他们。

      Coroutine是一种轻量级的用户态线程,实现的是非抢占式的调度。详细解释这里涉及到的几个概念:

      1. 非抢占式

        意思是当前协程切换到其他协程由当前协程来控制,当一个协程发现自己执行不下去了,就由这个协程通知调度器,调度器通过事先设计好的算法启动当前最需要CPU的协程。切换这个协程的CPU上下文把CPU的运行权交给这个协程。

        目前的协程框架为1:N模式,即一个线程作为容器里面放置多个协程

    • 资源调度

      协程,是通过程序员自己写的调度策略,通过协作而不是抢占来进行切换。

  • 各语言下的协程

    Pythongevent

    《谈谈Python协程技术的演进》

  • 从计算机历史脉络理解协程

    单核CPU、并行、进程、线程、纤程、协程出现必要性解析

    编程珠玑番外篇-Q 协程的历史,现在和未来

  • References

  1. 进程和线程、协程的区别
  2. coroutine协程详解
  3. 御坂研究所多路复用、非阻塞、线程与协程
  4. PHP7下的协程实现
  5. 维基百科:协程
  6. 什么是协程 ?
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!