Что именно io_context? - PullRequest
       71

Что именно io_context?

1 голос
/ 02 апреля 2020

Я прошел через библиотеку boost asio, в которой большинству объектов нужен объект io_context в качестве аргумента для конструктора. Я прочитал, что такое объект io_context, в соответствии с документацией говорится, что это

Класс io_context обеспечивает базовую функциональность ввода-вывода для пользователей асинхронных объектов ввода-вывода

Что меня смущает, потому что это не то, что делает iostream . Я действительно уверен, что что-то упускаю, пожалуйста, помогите мне уточнить это, а также я не вижу большая разница между объектами ввода-вывода с сокетами , за исключением того факта, что сокеты могут использоваться для обмена данными между двумя устройствами, тогда как объекты ввода-вывода позволяют нам обмениваться данными с нашим компьютером. Я действительно запутался в этом пункте!

1 Ответ

3 голосов
/ 02 апреля 2020

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 поддерживает сопрограммы .

...