2011-01-31 16 views
5

Estoy implementando un conjunto de protocolos simples usando boost :: asio (esquemas de transferencia inconscientes). Estos son vinculados a la CPU cuando se ejecutan. Para mejorar la eficiencia, quiero tratar de mantener los dos hosts trabajando tanto como sea posible. Si el host A tiene la opción de realizar dos tareas, una de las cuales permitiría que el host B inicie el cálculo y otra que no, quiero que el host A elija el primero.¿Cómo forzar boost :: asio para priorizar el acabado de llamadas async_write sobre la ejecución de otros controladores?

Actualmente, io_service ejecuta controladores de cómputo intensivos antes de async_writes. A menos que la ventana tcp esté llena (o alguna condición similar está bloqueando la escritura de datos en el socker), es casi seguro que es mejor terminar el async_write en lugar de ejecutar otro manejador.

He visto el ejemplo de asio de una cola de prioridad para los controladores. ¿Volver a implementar async_write para usar esa cola de prioridad es la única solución a mi problema?

Respuesta

3

Hay an example en la documentación que describe cómo asignar una prioridad a los controladores de finalización. No necesitará volver a implementar async_write, simplemente implemente su propia versión de la clase handler_priority_queue del ejemplo.

+0

Vi ese ejemplo. No entiendo cómo asignar una prioridad a async_write. Como la escritura es asincrónica, creo que hay manejadores de finalización que se llaman internos para async_write. Si es así, necesito aumentar su prioridad. – Amy

+0

@Amy ¿te preocupa que 'async_write' sea una operación compuesta? –

+0

Me preocupa que async_write no sea un controlador de finalización (supongo que esto significa algo que implementa Handler y se pasa a io_service :: post.) También me preocupa el hecho de que async_write sea una operación compuesta. – Amy

Cuestiones relacionadas