Подтвердить что ты не робот

Io_service, почему и как он используется?

Попытка узнать asio, и я следую примерам с сайта.

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

4b9b3361

Ответ 1

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

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

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

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

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