问题
聊一下对 “协程” 的理解。
答案
协程 是 轻量级的用户级线程。
关键点有两个:
1、【轻量级】:Linux的线程默认大小是 8M,而协程的大小是 几KB的样子,所以在程序中是可以轻松创建几十万个协程的;
2、【用户级】: 协程工作在用户态,对协程进行创建、切换和销毁时,操作系统是无感知的,也就避免了 对系统的调用。
总结: 【轻量级】和【用户级】是核心和关键。
扩展
可以再补充和加深一些内容:
我们知道协程是在用户态模拟出的一个【执行体】,但最终这个执行体还是交给了 系统级的线程运行;调度器做的核心工作就是可以在一个 系统级的线程中模拟出 多个 【执行体】出来。 那么 协程的运作模式也就有了:
(1) 1:1 模式, 即一个系统级线程只模拟出一个 协程; (实现简单,但并发能力低)
(2) 1:M 模式,即一个系统级线程模拟出多个 协程;(实现也简单,虽并发能力高,但无法充分利用多核优势)
(3) N:M 模式,即多个系统级线程模拟出多个 协程;(实现复杂,但并发能力高,也充分利用了多核优势)
大名鼎鼎的 Go 语言中协程的运作模式即是 N:M 模式。