ответ

9

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

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

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

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

In programming, asynchronous events are those occurring independently of the main program flow. Asynchronous actions are actions executed in a non-blocking scheme, allowing the main program flow to continue processing.

Так только потому, что что-то event driven не делает его asynchronous, и только потому, что что-то asynchronous не делает его event driven либо; гораздо меньше одновременно.

+0

Я думал, что Node.js на самом деле асинхронный. – nickb

+1

@nickb с первой страницы Node.js «Узел похож по дизайну и зависит от таких систем, как Machine Event Ruby или Twisted Python». и «Но как насчет многопроцессорного параллелизма? Не нужны ли потоки для масштабирования программ для многоядерных компьютеров? Вы можете запускать новые процессы через child_process.fork(), эти другие процессы будут запланированы параллельно». –

3

Они по существу являются ортогональными понятиями.

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

«асинхронный» означает, что поток программы не должны ждать вызова должны быть выполнены, прежде чем перейти в течение (в основном реализованы с вызов, который возвращает сразу после делегирования исполнения в другой поток или процесс)

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

0

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

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

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