7

ウィキペディアの例について: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

従来のイベントベースのアプローチでこの種の使用パターンを処理できるのではないかと思いますが、なぜコルーチンを使用する必要があるのでしょうか。

4

2 に答える 2

6

I think it is coroutines that are "traditional", and events are "modern". However, they also have different purpose; AFAIK, coroutines can either specify where to transfer control (like method calls) or be used to time-share, while events are loosely coupled communication (i.e. communicating "upwards" in a layered architecture).

Be sure to read Eric Lippert's blog series (from October, 2010) about continuation passing style if you are interested in things like these. There is one post titled "Musings about coroutines".

于 2011-02-13T10:25:54.690 に答える
0

ステートマシンで作業しているイベント駆動型プログラミングでは、スイッチまたは一連のコールバックを使用して、現在の状態を明示的に保持し、その状態で作業している作業を処理する必要があります。このようなプログラムは非線形です。

コルーチンベースのシステムでは、通常はシングルスレッドのプログラムを作成するのと同じように線形計画法を作成できますが、各イベント待機ポイントでブロックする代わりに、コンテキストを切り替えて、イベントが発生するまで他のコンポーネントに作業を任せます。コルーチンベースのシステムの多くでは、コルーチンを駆動し、イベントが到着したときにコルーチンの内外を切り替えるイベントループがあります。

于 2019-08-26T17:20:37.080 に答える