@
Yc1992 我本来想说的就是这一段。
When a coroutine blocks, such as by calling a blocking system call, the run-time automatically moves other coroutines on the same operating system thread to a different, runnable thread so they won't be blocked.
这里说的不是把多个 coroutine 放到同一个线程上来跑。是说如果有一个 coroutine 阻塞住了一个 thread,就把其它的 coroutine 放到别的线程上跑。
然后有一句话,The programmer sees none of this, which is the point. The result, which we call goroutines, ...
所以总结一下就是,有一个协程,它 block 住了(比如在 python 的 async function 里面写了一句 time.sleep ),这样其它的协程就不能跑了对吧,那我们写一个高级一点的 runtime,把能跑的协程放到其它 thread 上跑。
并且把这些过程都隐藏起来,什么 yield 之类的东西都没有了,都是 runtime 里面的事情。
所以说这是一个基于 coroutine 的想法,或者说是一个经过了大改的 coroutine,还专门说了这个东西叫 goroutine 不叫 coroutine 了。
所以还是上一条回复里面说的,它改完了就不是 coroutine 了。