Asio's io_service
- это помощник для работы с асинхронными функциями. Как только асинхронная операция готова, она использует один из запущенных потоков io_service
, чтобы перезвонить вам. Если такого потока не существует, он использует свой внутренний поток для вызова вас.
Думайте об этом как об очереди, содержащей операции. Это гарантирует, что эти операции при выполнении будут выполняться только в тех потоках, которые вызвали его методы run()
или run_once()
, или при работе с сокетами и асинхронным вводом-выводом, его внутренним потоком.
Причина, по которой вы должны передать ее всем, в основном заключается в том, что кто-то должен ждать готовности асинхронных операций, и, как указано в его собственной документации io_service
является ссылкой ASIO на службу ввода-вывода операционной системы, поэтому он абстрагируется собственные асинхронные уведомители платформы, такие как kqueue
, /dev/pool/
, epoll
, и методы для работы с ними, такие как select()
.
В первую очередь я в конечном итоге использую io_service для демультиплексирования обратных вызовов из нескольких частей системы и обеспечения их работы в одном потоке, исключая необходимость явной блокировки, поскольку операции сериализуются. Это очень мощный язык для асинхронных приложений.
Вы можете взглянуть на базовую документацию , чтобы лучше понять, почему io_service
нужен и что он делает.