Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527175
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: 嵌入式

2014-09-01 13:02:10

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模拟更自然合理。当然,也可以修改为生产者驱动,其语义上稍有不同而已。
阅读(975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~