Events 协同程序与事件驱动编程

Events 协同程序与事件驱动编程,events,coroutine,event-driven-design,Events,Coroutine,Event Driven Design,关于维基百科中的例子: 我只是想知道传统的基于事件的方法能够处理这种使用模式,为什么需要使用协同程序?我认为协同程序是“传统的”,而事件是“现代的”。但是,它们也有不同的目的;好的,当事件是松散耦合的通信时,协同路由可以指定在何处传输控制(如方法调用),也可以指定在何处使用协同路由 如果你对这些东西感兴趣,一定要阅读(2010年10月)关于接续传球风格的文章。有一篇文章的标题是“在事件驱动编程中,如果您在状态机上工作,则需要显式地保持当前状态,并通过使用开关或一系列回调来处理处于该状态的工作。

关于维基百科中的例子:


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

我认为协同程序是“传统的”,而事件是“现代的”。但是,它们也有不同的目的;好的,当事件是松散耦合的通信时,协同路由可以指定在何处传输控制(如方法调用),也可以指定在何处使用协同路由


如果你对这些东西感兴趣,一定要阅读(2010年10月)关于接续传球风格的文章。有一篇文章的标题是“

在事件驱动编程中,如果您在状态机上工作,则需要显式地保持当前状态,并通过使用开关或一系列回调来处理处于该状态的工作。这些程序是非线性的


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

感谢您的精彩博客推荐!
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