Почему boost::aio является асинхронным, когда его реализация основана на epoll(синхронно)

Мы знаем:

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

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

У меня вопрос: как вы можете реализовать "asyn", используя системный вызов "syn"? Если только вы не используете ядро ​​/ систему, поддерживаемые интерфейсом aio, верно?

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

1 ответ

Решение

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

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

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

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