Основанный на событиях == Асинхронный? - PullRequest
4 голосов
/ 28 октября 2011

Является ли «основанный на событиях» такой же, как «асинхронный»?

Ответы [ 3 ]

9 голосов
/ 28 октября 2011

Нет, это не означает, что события асинхронны.

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

Примерами этого являются Swing (Java), Twisted (Python), Node.js (JavaScript), EventMachine (Ruby)

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

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

Так что только то, что что-то является event driven, не делает его asynchronous, и то, что что-то есть asynchronous, тоже не делает это event driven;намного меньше одновременных .

3 голосов
/ 28 октября 2011

Это по сути ортогональные понятия.

" управляемый событиями " по сути означает, что код, связанный с определенными вызовами функций, связывается во время выполнения (и может изменяться в процессе выполнения). Кто «запускает» событие, не знает, что его обработает, и кто обрабатывает событие, определено так, чтобы реагировать на событие через ассоциацию, определенную во время выполнения программы. Обычно это указатели на функции, ссылки или указатели на объекты, переносящие виртуальные методы и т. Д.)

" asynchronous " означает, что потоку программы не нужно ждать выполнения вызова перед продолжением (в основном это выполняется с помощью вызова, который возвращается сразу после делегирования выполнения другому потоку или процессу). )

Не все события являются асинхронными (вспомните окна SendMessage, относящиеся к PostMessage), и не все асинхронные вызовы необходимы для реализации «событиями» (хотя использование механизма событий довольно распространено для реализации асинхронных вызовов)

0 голосов
/ 28 октября 2011

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

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

Принимая во внимание, что вычисление и ответ связаны точкой в ​​потоке управления для синхронного режима, вы должны выполнить соединение самостоятельно в асинхронном режиме. Например, путем использования порядкового номера или чего-то еще.

...