Coroutine vs Event-ориентированное программирование

Что касается примера в Википедии: 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

Мне просто интересно, что традиционный подход, основанный на событиях, может справиться с такого рода схемой использования, зачем использовать сопрограмму?

1 ответ

Решение

Я думаю, что сопрограммы являются "традиционными", а события - "современными". Тем не менее, они также имеют другое назначение; AFAIK, сопрограммы могут либо указывать, куда передавать управление (например, вызовы методов), либо использоваться для совместного использования времени, в то время как события представляют собой слабо связанные коммуникации (т.е. передача "вверх" в многоуровневой архитектуре).

Обязательно прочитайте серию блогов Эрика Липперта (от октября 2010 года) о стиле продолжения прохождения, если вас интересуют подобные вещи. Есть один пост под названием " Размышления о сопрограмм ".

В программировании, управляемом событиями, вы работаете с конечным автоматом, вам необходимо явно сохранять свое текущее состояние и обрабатывать работу, в которой вы выполняете это состояние, либо с помощью переключателя, либо с помощью последовательности обратных вызовов. Такие программы нелинейны.

В системе на основе сопрограмм вы можете написать линейную программу, как вы обычно пишете однопоточную, но вместо блокировки в каждой точке ожидания события вы переключите контекст и позволите другим компонентам выполнять свою работу, пока не придет ваше событие. Во многих системах на основе сопрограмм вы найдете цикл событий, который запускает сопрограммы и переключает сопрограммы и отключает их, когда приходит их событие.

Другие вопросы по тегам