什么是coroutine(协程)?

Coroutine isn't thread!(协程不是线程!)

Coroutinethread有许多共同点:每个coroutine(或thread)都有一组指令执行序列,私有的栈,私有的局部变量,私有的程序计数器(program counter);同时各个coroutine(或thread)之间共享全局变量等等信息。

Coroutinethread的不同在于:在多核系统上,一个进程的多个thread是可以并行运行的(in parallel),即在一个时间点上,多个thread同时在运行。而coroutine之间是合作式的(collaborative),在任何一个时间点,只有一个coroutine在运行。Coroutine之间的调度是非抢占式的(non-preemptive):只有运行的coroutine主动地放弃执行权,其它coroutine才可以获得执行机会。

“Orthogonality”的含义

Orthogonality(正交性)的含义通俗来讲是指“改变A不会改变B”。一个“Orthogonality”系统的例子是收音机:换台不会改变音量;而不是“Orthogonality”系统的例子则是直升飞机:改变速度也会改变方向。

在编程语言中,Orthogonality指执行一条指令时,只有这条指令被执行,不会有其它任何副作用(side-effect)。

参考资料:
What is “Orthogonality”?