2010-06-10 8 views

Respuesta

19

No, eso debería funcionar bien. Todo el estado del intérprete es autónomo en cada instancia de Lua. Incluso diría que es la forma preferida de usar Lua con múltiples hilos y/o procesos.

Si usted encuentra que usted necesita para comunicarse entre Lua establece el tiempo, entonces lo mejor es serializar los datos y transmitirla mediante la API C. Recomiendo leer el documento técnico "Exploring Lua for Concurrent Programming". Se introduce un método de uso múltiple Lua processes con message passing para inter-process communication.

5

creación de un único lua_State por hilo es una buena solución para tener múltiples hilos de ejecución Lua. Sin embargo, esos estados son muy separados. En particular, es difícil comunicarse de forma segura entre ellos, ya que la API de Lua solo es segura para subprocesos siempre que se acceda a cada lua_State desde un solo subproceso a la vez. (Bueno, a menos lua_lock y lua_unlock se implementan como un mutex adecuado, que no están en el valor por defecto obra del núcleo lua.)

Si ese nivel de aislamiento no es aceptable, entonces usted necesita para investigar uno de los varios mecanismos para permitir que las instancias de Lua jueguen bien con otros en un proceso enhebrado.

Mi elección favorita es Lua Lanes que proporciona múltiples hilos junto con un mecanismo para pasar mensajes y compartir valores entre ellos de una manera segura para hilos. Los valores de la mayoría de los tipos de Lua (incluido userdata con un pequeño soporte lateral en C de la biblioteca que lo utiliza) se pueden pasar de manera segura y eficiente de un carril a otro. Existen

Otros mecanismos, y un buen punto de partida para la mayoría de ellos está en el usuario de wiki page on MultiTaksing Lua.

3

Eres bueno siempre y cuando no intentes pasar valores entre las instancias de Lua sin convertirlas primero a C. Por ejemplo, será casi imposible compartir una tabla mutable entre instancias.

Lo que pides suena fácil de hacer, pero no necesariamente más útil que simplemente tener múltiples procesos en ejecución, cada uno con su propia Lua y su propio espacio de direcciones.

Cuestiones relacionadas