Coroutine isn't thread!
(协程不是线程!)
Coroutine
和thread
有许多共同点:每个coroutine
(或thread
)都有一组指令执行序列,私有的栈,私有的局部变量,私有的程序计数器(program counter
);同时各个coroutine
(或thread
)之间共享全局变量等等信息。
Coroutine
和thread
的不同在于:在多核系统上,一个进程的多个thread
是可以并行运行的(in parallel
),即在一个时间点上,多个thread
同时在运行。而coroutine
之间是合作式的(collaborative
),在任何一个时间点,只有一个coroutine
在运行。Coroutine
之间的调度是非抢占式的(non-preemptive
):只有运行的coroutine
主动地放弃执行权,其它coroutine
才可以获得执行机会。