¿Por qué JavaScript no admite subprocesos múltiples?
¿Es una decisión de diseño deliberada o un problema con nuestros navegadores actuales que se solucionará en las próximas versiones?
JavaScript no admite subprocesos múltiples porque el intérprete de JavaScript en el navegador es un subproceso único (AFAIK). Incluso Google Chrome no permitirá que JavaScript de una sola página web se ejecute simultáneamente porque esto causaría problemas masivos de concurrencia en las páginas web existentes. Todo lo que Chrome hace es separar múltiples componentes (diferentes pestañas, complementos, etc.) en procesos separados, pero no puedo imaginar que una sola página tenga más de un hilo de JavaScript.
Sin embargo, puede utilizarlo, como se sugirió, setTimeout
para permitir algún tipo de programación y concurrencia "falsa". Esto hace que el navegador recupere el control del hilo de renderizado e inicie el código JavaScript proporcionado setTimeout
después de la cantidad de milisegundos especificada. Esto es muy útil si desea permitir que la ventana gráfica (lo que ve) se actualice mientras realiza operaciones en ella. Simplemente recorrer, por ejemplo, las coordenadas y actualizar un elemento en consecuencia le permitirá ver las posiciones inicial y final, y nada intermedio.
Usamos una biblioteca de abstracción en JavaScript que nos permite crear procesos e hilos que son todos administrados por el mismo intérprete de JavaScript. Esto nos permite ejecutar acciones de la siguiente manera:
- Proceso A, Hilo 1
- Proceso A, Hilo 2
- Proceso B, Hilo 1
- Proceso A, Hilo 3
- Proceso A, Hilo 4
- Proceso B, Hilo 2
- Pausar el proceso A
- Proceso B, Hilo 3
- Proceso B, Hilo 4
- Proceso B, Hilo 5
- Iniciar proceso A
- Proceso A, Hilo 5
Esto permite alguna forma de programación y simula paralelismo, inicio y detención de subprocesos, etc., pero no será un verdadero subproceso múltiple. No creo que alguna vez se implemente en el lenguaje en sí, ya que el verdadero subproceso múltiple solo es útil si el navegador puede ejecutar un subproceso múltiple de una sola página (o incluso más de un núcleo), y las dificultades allí son mucho mayores. que las posibilidades adicionales.
Para conocer el futuro de JavaScript, consulte esto: https://developer.mozilla.org/presentations/xtech2006/javascript/
El subproceso múltiple de JavaScript (con algunas limitaciones) está aquí. Google implementó trabajadores para Gears y se están incluyendo trabajadores en HTML5. La mayoría de los navegadores ya han agregado soporte para esta función.
La seguridad de los subprocesos de los datos está garantizada porque todos los datos comunicados hacia/desde el trabajador se serializan/copian.
Para más información, lea:
http://www.whatwg.org/specs/web-workers/current-work/
http://ejohn.org/blog/web-workers/