【问题标题】:Coroutine vs Event driven programming协程与事件驱动编程
【发布时间】:2011-06-26 09:29:24
【问题描述】:

关于维基百科中的示例: http://en.wikipedia.org/wiki/Coroutine

var q := new queue

coroutine produce
    loop
        while q is not full
            create some new items
            add the items to q
        yield to consume

coroutine consume
    loop
        while q is not empty
            remove some items from q
            use the items
        yield

我只是想知道传统的基于事件的方法可以处理这种使用模式,为什么需要使用协程?

【问题讨论】:

    标签: events coroutine event-driven-design


    【解决方案1】:

    我认为协程是“传统的”,而事件是“现代的”。但是,它们也有不同的目的; AFAIK,协程可以指定将控制转移到哪里(如方法调用)或用于time-share,而事件是松散耦合的通信(即在layered architecture 中“向上”通信)。

    如果您对此类内容感兴趣,请务必阅读Eric Lippert's blog series(自 2010 年 10 月起)关于延续传递风格的信息。有一篇名为“Musings about coroutines”的帖子。

    【讨论】:

    • 感谢您的精彩博客推荐!
    【解决方案2】:

    在事件驱动的编程中,您正在使用状态机,您需要明确地保持当前状态并在该状态下处理您正在进行的工作,方法是使用开关或一系列回调。这样的程序是非线性的。

    在基于协程的系统中,您可以像通常编写单线程程序一样编写线性程序,但不是在每个事件等待点阻塞,而是切换上下文并让其他组件完成工作,直到您的事件来了。在许多基于协程的系统中,您会发现一个事件循环驱动协程并在协程事件到达时切换进出协程。

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2015-10-06
      • 2010-12-22
      • 1970-01-01
      • 2014-01-03
      • 2016-04-02
      • 2011-06-23
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多