Pregunta

Intento aprender asio y sigo los ejemplos del sitio web.

¿Por qué se necesita io_service y qué hace exactamente?¿Por qué necesito enviarlo a casi todas las demás funciones mientras realizo operaciones asincrónicas? ¿Por qué no puede "crearse" a sí mismo después del primer "enlace"?

¿Fue útil?

Solución

asio's io_service es el facilitador para operar en funciones asincrónicas.Una vez que una operación asíncrona está lista, utiliza uno de io_serviceEstá ejecutando hilos para devolverte la llamada.Si no existe tal hilo, utiliza su propio hilo interno para llamarte.

Piense en ello como una cola que contiene operaciones.Le garantiza que esas operaciones, cuando se ejecuten, solo lo harán en los subprocesos que llamaron a su run() o run_once() métodos, o cuando se trata de sockets y IO asíncrono, su hilo interno.

La razón por la que debes pasárselo a todos es básicamente que alguien tiene que esperar a que las operaciones asíncronas estén listas, y como se indica en su propia documentación. io_service es el enlace de ASIO al servicio de E/S del sistema operativo, por lo que abstrae los notificadores asíncronos propios de la plataforma, como kqueue, /dev/pool/, epoll, y los métodos para operar sobre ellos, tales como select().

Principalmente termino usando io_service para demultiplexar devoluciones de llamadas de varias partes del sistema y asegurarme de que operen en el mismo hilo, eliminando la necesidad de bloqueo explícito, ya que las operaciones están serializadas.Es un modismo muy poderoso para aplicaciones asincrónicas.

Puedes echarle un vistazo a documentación básica para tener una mejor idea de por qué io_service se necesita y lo que hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top