coroutine的三个状态:suspend, running, dead.
新创建的coroutine处于suspend状态;
resume使coroutine由suspend状态进入running态
yield使coroutine进入suspend态。
由于coroutine总是被resume调用而运行,yield看起来就象是resume的返回点,象函数return一样。
如果要模拟出多线程的效果,就需要一个类似于coodinator的概念,它负责选择合适的coroutine,一会儿resume这个,一会儿resume那个。只不过,coroutine需要自已在合适的时候,yield而让出执行。如果需要更复杂的,类似OS的调度器,那么yield需要能够做得更复杂一点,即yield不仅把自已suspend住,还要以合适的策略挑选一个coroutine运行,嗯,就是resume它。
resume和yield的数据交换
yield传给coroutine的主程序
yield传给resume
resume传给yield
主程序的返回值给yield
resume在coroutine的执行中更处于主导地位,它给coroutine提供参数,获取返回值,而coroutine的执行更被动一些,它执行,通过yield返回数据,让出CPU。所以在producer, consumer中,consumer用resume模拟,producer用yield模拟更自然合理。当然,也可以修改为生产者驱动,其语义上稍有不同而已。
阅读(980) | 评论(0) | 转发(0) |