Вопрос

Пытаюсь изучить asio и следую примерам с сайта.

Зачем нужен io_service и что именно он делает?Зачем мне его отправлять практически во все остальные функции при выполнении асинхронных операций, почему он не может "создать" себя после первой "привязки".

Это было полезно?

Решение

Азио io_service является помощником для работы с асинхронными функциями.Когда асинхронная операция готова, она использует один из io_serviceзапускает темы, чтобы перезвонить вам.Если такого потока не существует, он использует свой собственный внутренний поток для вызова вас.

Думайте об этом как об очереди, содержащей операции.Он гарантирует вам, что эти операции при запуске будут выполняться только в тех потоках, которые вызвали его. run() или run_once() методы или при работе с сокетами и асинхронным вводом-выводом — его внутренний поток.

Причина, по которой вы должны передать его всем, заключается в том, что кто-то должен ждать готовности асинхронных операций, как указано в его собственной документации. io_service — это ссылка ASIO на службу ввода-вывода операционной системы, поэтому она абстрагирует собственные асинхронные уведомители платформы, такие как kqueue, /dev/pool/, epoll, и методы работы с ними, такие как select().

В основном я использую io_service для демультиплексирования обратных вызовов из нескольких частей системы и гарантирую, что они работают в одном потоке, устраняя необходимость явной блокировки, поскольку операции сериализуются.Это очень мощная идиома для асинхронных приложений.

Вы можете взглянуть на основная документация чтобы лучше понять, почему io_service нужен и что он делает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top