В чем разница между событиями и асинхронным? Между Эполла и Айо?

StackOverflow https://stackoverflow.com/questions/5844955

Вопрос

Основанные на событиях и асинхронные часто используются в качестве синонимов. Есть ли какие -либо различия между ними?

Кроме того, в чем разница между epoll а также aio? Как они сочетаются друг с другом?

Наконец, я много раз читал, что AIO в Linux ужасно сломлен. Как именно это сломано?

Спасибо.

Это было полезно?

Решение

События - одна из парадигм для достижения асинхронного исполнения. Но не все асинхронные системы используют события. Это о семантическом значении этих двух - один - супер -предприятие другого.

Epoll и AIO используют разные метафоры:

Epoll - это операция блокировки (epoll_wait()) - вы блокируете поток, пока не произойдет какое -то событие, а затем отправляете событие на разные процедуры/функции/филиалы в вашем коде.

В AIO вы передаете адрес вашей функции обратного вызова (процедуры завершения) в систему, и система вызывает вашу функцию, когда что -то происходит.

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

Другие советы

Они совершенно разные вещи.

Парадигма, управляемая событиями, означает, что объект, называемый «событием», отправляется в программу всякий раз, когда что-то происходит, без этого «чего-то» необходимо опросить через регулярные промежутки времени, чтобы выяснить, произошло ли это. Это «событие» может быть пойман в ловушке программой для выполнения некоторых действий (то есть «обработчик») - синхронно или асинхронное.

Следовательно, обработка событий может быть либо синхронной, либо асинхронной. JavaScript, например, использует синхронную систему событий.

Асинхронный означает, что действия могут произойти независимо от текущего «основного» потока выполнения. Имейте в виду, это так НЕТ означает «параллель», или «другой нить». «Асинхронное» действие может фактически выполняться на основном потоке, блокируя «основной» поток выполнения в это время. Так что не путайте «асинхронно» с «многопоточным».

Вы можете сказать, что, технически говоря, автоматически асинхронная операция предполагает Событие - по крайней мере «завершено», «ошибочно» или «прерванные/отмененные» события (один или несколько из них) отправляются в зачинку операции (или саму базовый O/S), чтобы сигнализировать о том, что операция прекратила Анкет Таким образом, асинхрон всегда управляется событиями, но не наоборот.

Событие - это единственный поток, где события зарегистрированы для определенного сценария. Когда этот сценарий столкнулся, события увольняются. Однако даже в то время каждое из событий выпускается последовательным образом. В этом нет ничего асинхронного. Node.js (WebServer) использует события для борьбы с несколькими запросами.

Асинхронно - это в основном многозадачность. Он может вытащить несколько потоков или процессов для выполнения определенной функции. Это полностью отличается от событий, основанного на том смысле, что каждый поток независим и вряд ли взаимодействует с основным потоком. Apache (WebServer) использует несколько потоков для борьбы с входящими запросами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top