¿Hay alguna manera de que pueda tener coroutines seguras para hilos junto con boost :: asio?Thread coroutines seguras con asio
Quiero que uno io_service
se ejecute en varios subprocesos y que algunos de mis controladores sean correcciones.
Boost.Coroutine parece ser una solución, pero document que no son compatibles con la reanudación de una corutina que se inició en un hilo separado.
Por lo que yo sé que sólo hay dos posibles soluciones a este problema:
- no utilice corrutinas. Utilice el método mucho más detallado (incluso con lambda), pero igualmente funcional de encadenamiento de devoluciones de llamadas que almacenan el estado.
- Fuerza a cada controlador para que solo se ejecute en un subproceso. Sé que esto es posible simplemente teniendo un io_servicio separado para cada hilo. Como un aparte, ¿hay una manera fácil, similar a io_service :: strand, de forzar a un conjunto de manejadores a ejecutarse en el mismo hilo?
Ninguna de las dos es una buena solución. En una solución, pierdo corotines. En el otro, pierdo la mayor parte de mi capacidad de subprocesamiento múltiple.
FYI: ¿Has visto http://blog.think-async.com/2009/08/secret-sauce-revealed.html y http://blog.think-async.com/2010/03/potted- guide-to-stackless-coroutines.html? – Ralf
@Ralf Sí, lo he visto, y por eso estoy haciendo esta pregunta. Parece una idea genial y una forma más fácil de escribir código asíncrono. – Lalaland