multithreading - Las prioridades del hilo en Lua
thread-priority (2)
En Lua, los hilos no pueden ejecutarse en paralelo (es decir, en múltiples núcleos) dentro de un estado Lua. No hay concurrencia, ya que es una multitarea cooperativa. Solo cuando un hilo suspende la ejecución (rendimiento), puede reanudarse otro hilo. En ningún momento pueden dos hilos Lua ejecutarse simultáneamente dentro de un estado Lua.
De lo que estás hablando es de preferencia: un planificador que interrumpe un hilo para permitir que otro se ejecute.
Eché un vistazo al libro de Lua y aprendí que multi-threading en Lua es cooperativo. Lo que no pude encontrar es información sobre las prioridades de subprocesos. Supongo que los subprocesos con la misma prioridad se ejecutan hasta su finalización, ya que el multithreading es cooperativo o se realiza un rendimiento. ¿Qué pasa con un hilo que tiene mayor prioridad que otro?
¿Puede interrumpir el que tiene una prioridad más baja o se ejecutará a continuación cuando el hilo con menor prioridad se haya ejecutado hasta su finalización?
No hay hilos nativos (multitarea preventiva) en Lua, sin embargo hay multitarea cooperativa como usted dijo.
La diferencia entre la multitarea preventiva y la multitarea cooperativa es que, en la multitarea preventiva, los "hilos" no necesariamente pueden ejecutarse hasta su finalización, pero pueden ser reemplazados por otros hilos. Esto lo hace el planificador, que se ejecuta a intervalos regulares, cambiando un hilo por otro. Aquí es donde entran en juego las prioridades. Si un subproceso con mayor prioridad desea ejecutarse, puede adelantarse a un subproceso que ya esté ejecutándose con menor prioridad, y el planificador elegirá ese subproceso (según la estrategia de programación) la próxima vez que se ejecute el planificador.
En la multitarea cooperativa no tiene que haber un programador (aunque por razones prácticas, generalmente es una buena idea tener uno). Sin embargo, hay coprocesos. Un co-proceso es como un hilo, excepto que no puede ser reemplazado. Puede ejecutarse hasta su finalización o ceder a otro coproceso y permitir que se ejecute.
Volviendo a su pregunta, si desea prioridades con la multitarea cooperativa, debe escribir un planificador, que decide qué coproceso ejecutar, dada su prioridad, y debe escribir su coproceso, por lo que renuncian al procesamiento una vez en un momento, y vuelva el control al programador.
Editar
Para aclarar, hay una ligera diferencia entre la multitarea no preventiva y la multitarea cooperativa. La multitarea no preventiva es un poco más amplia, ya que permite la programación estática y la multitarea cooperativa.
La programación estática significa que un planificador puede programar tareas periódicas, que luego pueden ejecutarse cuando se produce una tarea, tal vez con una mayor prioridad.
La multitarea cooperativa también es un tipo de multitarea no preventiva. Sin embargo, aquí las tareas solo están programadas por las tareas mismas, y el control se cede explícitamente de una tarea a otra, pero a qué tarea cede, puede basarse en una prioridad.