io_service, por que e como ele é usado?
-
23-08-2019 - |
Pergunta
Tentar aprender asio, e eu estou seguindo os exemplos do site.
Por que é io_service necessário eo que ele faz exatamente? Por que eu preciso para enviá-lo para quase todas as outras funções durante a execução de operações assíncronas, por que não pode "criar"-se após a primeira "ligação".
Solução
io_service
do Asio é o facilitador para a operação de funções assíncronas. Uma vez que uma operação assíncrona está pronto, ele usa um dos threads em execução de io_service
para chamá-lo de volta. Se não existir tal fio que utiliza a sua própria rosca interna para chamá-lo.
Pense nisso como uma fila contendo operações. Ela garante que essas operações, quando executado, irá fazê-lo apenas sobre os tópicos que chamaram seus métodos run()
ou run_once()
, ou quando se lida com soquetes e S assíncrona, a sua rosca interna.
A razão que você deve passá-lo para todos é basicamente que alguém tem que esperar para operações assíncronas para estar pronto, e, como afirmou em sua própria io_service
documentação é o elo ASIO para que o sistema operacional / service O modo que abstrai da plataforma notificadores próprios assíncronas, como kqueue
, /dev/pool/
, epoll
, e os métodos para operar sobre aqueles, como select()
.
Primeiramente eu acabo usando io_service para retornos de chamada demultiplex de várias partes do sistema e certifique-se que eles operam no mesmo segmento, eliminando a necessidade de bloqueios explícitos, uma vez que as operações são serializados. É uma linguagem muito poderosa para aplicações assíncronas.
Você pode dar uma olhada no núcleo documentação para obter uma melhor sensação de por que é necessário io_service
eo que ele faz.