2009-04-04 22 views
34

Tratando de aprender asio, y estoy siguiendo los ejemplos del sitio web.io_service, ¿por qué y cómo se usa?

¿Por qué se necesita io_service y qué hace exactamente? ¿Por qué tengo que enviarlo a casi todas las demás funciones mientras realizo operaciones asíncronas? ¿Por qué no puede "crearse" después del primer "enlace"?

Respuesta

46

Asio io_service es el facilitador para operar en funciones asíncronas. Una vez que una operación asincrónica está lista, usa uno de los hilos en ejecución de io_service para devolverte la llamada. Si no existe dicho hilo, usa 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 hilos que llaman sus métodos run() o run_once(), o cuando se trata con sockets y async IO, su hilo interno.

La razón por la que debe pasársela a todo el mundo es básicamente que alguien tiene que esperar para que las operaciones asincrónicas 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. los propios notificadores asíncronos de la plataforma, como kqueue, /dev/pool/, epoll, y los métodos para operar en aquellos, como select().

Principalmente termino utilizando io_service para demultiplexar devoluciones de llamadas desde varias partes del sistema, y ​​me aseguro de que operen en el mismo subproceso, eliminando la necesidad de bloqueo explícito, ya que las operaciones se serializan. Es una expresión muy poderosa para aplicaciones asíncronas.

Puede echar un vistazo a core documentation para tener una mejor idea de por qué io_service es necesario y para qué sirve.

+2

'Principalmente termino usando io_service para demultiplexar devoluciones de llamadas de varias partes del sistema, y ​​me aseguro de que operen en el mismo hilo, (...)' ¿Podrías por favor elaborar un poco sobre este modismo? – syntagma

+0

@ ΔλЛ acaba de publicar operaciones en io_service y cuando llegue el momento de que se ejecuten, seleccionará el hilo correcto y lo ejecutará, tal vez serializarlo si usa un hilo para envolver las operaciones. – Berkus

Cuestiones relacionadas