He estado trabajando en la implementación de un sistema bastante complejo en JavaScript que necesita simular, entre otras cosas, procesos multiproceso. En un proceso real multiproceso (como un hilo del núcleo) es posible cambiar entre hilos mediante el cambio de contexto. Esto funciona porque puede almacenar el contador de programa del proceso actual y registrarse en una estructura temporal, restaurar el contador del programa y registrarse para algún otro proceso, y luego reanudar donde lo dejó en el proceso anterior.Simulando interruptores de contexto en JavaScript?
Tengo curiosidad si es posible tener algo similar a esto en JavaScript. Actualmente no sé cómo hacer esto y he estado diseñando el sistema usando multitareas cooperativas. En particular, cualquier "función" que deseo ejecutar en el simulador de subprocesos múltiples se divide en una matriz de funciones. Para ejecutar la "función", repito a través de la matriz de funciones, ejecutándolas en orden mientras mantengo un "contador de programa" cuya función ejecutar a continuación. Esto me permite simular un cambio de contexto llamando a una de las funciones de la matriz, esperando que la función regrese, y luego cambiando a otra serie de funciones que deben ejecutarse.
Mi enfoque actual funciona, pero es difícil escribir código en este sistema. Cada función tiene que indicar específicamente cuándo se puede interrumpir, y dado que las funciones en la matriz están todas separadas, la lógica para comunicar datos entre diferentes partes de la función es complicada. Esperaba conseguir algo más cercano a trabajar en múltiples tareas preventivas.
Mi pregunta es: ¿es posible ejecutar una función de JavaScript arbitraria de manera que pueda ser suspendida y reanudada por una fuente externa?
Mención obligatoria de [Trabajadores web] (https://developer.mozilla.org/En/Using_web_workers) cuando alguien usa JavaScript y multihilo en la misma oración. –