写的真好,感觉接近真相了
【 在 Maksim 的大作中提到: 】
: 虽然从最底层的实现上,coroutine 和 thread 类似,但他们对开发者暴露的用途不一样.
: coroutine 很重要的一点是提供了在一个线程内部不同 task 间轻量级的切换。在线程内部,用户就可以根据自己的需求来协调。外部来看仍一个线程pin在一个 core 上满载,最大化性能。这个理念,在现代高性能事务处理里很常见。比如,事务A想拿锁,看到已经被事务B占了,事务A必须要 yield。这里A,B 和锁的结构可以都在一个线程内部,没有 I/O,但还是有逻辑上的 block和 yield。
: 至于为什么有同步,有 channel。因为 coroutine 也可以在不同线程上。一个线程内部不需要同步,但是两个 coroutine 在不同线程上就需要了。我觉得这样的抽象可以把 coroutine 和物理的线程彻底解耦开,为开发者性能优化提供方便。比如根据 task 的数量,动态分配物理线程执行,用最少的线程 (CPU cores),做最多的事情。每个 task的开发不用特别关心需要交互的task在一个线程内部,还是另外一个线程里。
: ...................
--
FROM 124.64.16.*