Почему boost::aio является асинхронным, когда его реализация основана на epoll(синхронно)
Мы знаем:
(1) epoll является синхронным, основанным на запросе пользователя / системном уведомлении. Цикл while используется для вызова всех проснувшихся fds.
(2) boost:: asio объявляет себя "асинхронным", но его реализация в linux использует epoll.
У меня вопрос: как вы можете реализовать "asyn", используя системный вызов "syn"? Если только вы не используете ядро / систему, поддерживаемые интерфейсом aio, верно?
Пожалуйста, помогите исправить мои заблуждения. Спасибо!
1 ответ
"синхронный" обычно относится к операции, которая не возвращает управление обратно вызывающей стороне, пока она не завершится.
epoll
является синхронным в том смысле, что его операция (возвращение fds с ожидающими завершениями / действиями) завершается к тому времени, когда она возвращается.
Однако чтение или запись в сокет все еще асинхронна в том смысле, что операция чтения или записи все еще не завершена, когда возвращается вызов функции. Фактическая работа ввода / вывода может выполняться асинхронно, и epoll
скажу вам, когда это будет сделано. Работа будет выполнена независимо от того, когда и когда вы позвоните epoll
, epoll
это всего лишь механизм, чтобы сообщить вам о завершении, а не функция, которая выполняет работу.