2017-02-04 1 views
0

Мы знаем:Почему повышение :: AIO является асинхронным, когда его реализация основана на Epoll (синхронно)

(1) Epoll является синхронным, на основе пользовательского запроса/системы оповещать. Цикл while используется для вызова всех разбуженных fds.

(2) boost :: asio объявляет себя «асинхронным», но его реализация на linux использует epoll.

Мой вопрос: как вы можете реализовать «asyn» с помощью системного вызова «syn»? Если вы не используете какой-либо поддерживаемый ядром/системой интерфейс aio, не так ли?

Пожалуйста, помогите исправить мои недоумения. Благодаря!

ответ

1

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

epoll является синхронным в том смысле, что его операция (возврат fds с ожидающими завершениями/действиями) завершена к моменту ее возвращения.

Чтение или запись в сокет однако все еще асинхронно в том смысле, что операция чтения или записи по-прежнему не завершена, когда возвращается вызов функции. Фактическая работа ввода-вывода может выполняться асинхронно, и epoll расскажет вам, когда это будет сделано. Работа будет выполняться независимо от того, когда и когда вы вызываете epoll, epoll - это всего лишь механизм, чтобы сигнализировать вам о завершении, а не функцию, выполняющую работу.

+0

«Фактическая работа ввода-вывода выполняется асинхронно» => «Фактическая работа ввода-вывода * может быть выполнена асинхронно», и вы хороши :) –

Смежные вопросы