-
线程和进程
线程、进程经常放在一起对比:
线程是最小单位,进程内至少包含一个线程。
对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。
进程间的切换(涉及栈、寄存器、虚拟内存、文件句柄等)开销较大,但是相对安全;不同进程通过进程间通讯来通信。
线程是比进程更小的、CPU调度和分派的、能独立运行的基本单位,可与同属一个进程的其他的线程共享进程所拥有的全部资源;线程间通信主要通过共享内存。
-
协程概念
协程,英文名***Coroutine***。
协程是一种用户态的轻量级线程,协程的调度完全由用户控制,拥有自己的寄存器上下文和栈。
一台机器只执行一个程序太浪费CPU资源了,当某个程序执行IO时就让出CPU资源交给另一个程序执行,这就是协程的思想。
协程是实现异步的一种方式。
从编程角度,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制。
-
协程与线程/进程的区别
-
编译器与操作系统
协程是编译器级的,Process和Thread是操作系统级的。
操作系统级的意思是对算法的调度是通过OS执行的,每次跑到OS分配的CPU时间后就会被OS强制挂起,开发者无法精确控制他们。
Coroutine是一种轻量级的用户态线程,实现的是非抢占式的调度。详细解释这里涉及到的几个概念:
-
非抢占式
意思是当前协程切换到其他协程由当前协程来控制,当一个协程发现自己执行不下去了,就由这个协程通知调度器,调度器通过事先设计好的算法启动当前最需要CPU的协程。切换这个协程的CPU上下文把CPU的运行权交给这个协程。
目前的协程框架为1:N模式,即一个线程作为容器里面放置多个协程。
-
-
资源调度
协程,是通过程序员自己写的调度策略,通过协作而不是抢占来进行切换。
-
-
各语言下的协程
Python
中gevent
-
从计算机历史脉络理解协程
-
References
来源:CSDN
作者:Quant_Learner
链接:https://blog.csdn.net/The_Time_Runner/article/details/104795295