io_context
содержит состояние, необходимое для запуска события l oop на основе select
, epoll
или других спецификаций платформы c вызовы и события отправки, такие как готовность сокета, таймер, сигнал, ожидание, для обратных вызовов, зарегистрированных пользователем. Многие обратные вызовы для разных сокетов, таймеров и т. Д. c .. могут быть зарегистрированы с одним io_context
. io_context
не выполняет ввод / вывод, но вызывает эти обратные вызовы, когда ввод / вывод может быть выполнен неблокирующим способом, например, когда получены данные и сокет готов к чтению, а обратный вызов выполняет фактическую неблокировку I / O.
Подробнее см. Basi c Анатомия Boost.Asio .
Другими популярными циклами событий являются libevent
и libuv
Проблема C10K устарела, но весьма поучительна в отношении асинхронных операций c В / В.
C ++ 20 сопрограмм представляет новую модель программирования, которая имеет преимущества, заключающиеся в том, что ее проще писать и читать, и она уменьшает адбэк обратного вызова , свойственный неблокирующему коду ввода / вывода. Boost.Asio поддерживает сопрограммы .