7

Javascript no tiene subprocesos visibles (aún - Los subprocesos de trabajador están llegando, vea más información en JavaScript and Threads).¿Cómo funcionan los "contextos de ejecución múltiple" de Javascript?

Sin embargo, parece tener múltiples contextos de ejecución que parecen existir simultáneamente: independiente, cuando tiene múltiples Firefox Windows y múltiples pestañas de Firefox/IE.

Cuando tiene múltiples iframes en una página, cada uno tiene su propio contexto de ejecución, pero tienen datos compartidos. Si dos iframes están en el mismo dominio, pueden acceder al DOM de cada uno y llamar a las funciones de los demás. Sin embargo, no pude encontrar una en Google una descripción del modelo de programación, es decir, si se trata de:

  • paralelo/anticipatoria, en cuyo caso - se puede suspender temporalmente? cualquier forma de exclusión mutua?
  • cooperativa, en cuyo caso, ¿cómo ceder a otro contexto?
  • sin superposición - es decir, un controlador de eventos en el marco principal debe regresar antes de que se pueda invocar un controlador de eventos en el iframe (y viceversa)?

Así que la pregunta es:

  • ¿Hay un contexto garantizada modelo de conmutación?
  • En caso negativo, ¿cuáles son los modelos de cambio de contexto que prevalecen?
    • Parece que Firefox e IE tienen un calendario que no se solapa entre contextos de la misma pestaña, y cooperativamente entre pestañas/ventanas diferentes en el mismo proceso, pero no estoy seguro.
    • Chrome usa el programador del sistema para diferentes pestañas (puede usar varios núcleos, que está en el grupo paralelo/preventivo, pero no sé lo que usa para varios fotogramas en la misma pestaña.
    • No tengo idea sobre Safari u Opera.

Gracias!

Respuesta

6

en Firefox, todo el código JavaScript en las páginas Web se ejecuta en el hilo principal, así que todo es serializado. Cada cuadro tendrá su propio JSContext y cada método se ejecuta hasta su finalización. No hay preferencia.

+1

(Ya lo sabes, pero para completar: eso es Firefox 3.5. A medida que los navegadores se multiprocesan, como Chrome ya es y Firefox será varias versiones más adelante, las pestañas no relacionadas probablemente se ejecutarán independientemente, mientras que (al menos por ahora) para "relacionadas "pestañas los desarrolladores del navegador intentan preservar la semántica" ejecutar hasta el final ") – Nickolay

+0

Claro, pero Firefox aún no lo hace, y al menos no lo hará hasta Firefox 4.0;) – sdwilsh

+0

Las pestañas separadas están en procesos separados, sin problemas ahí. Iframes/frames dentro de una pestaña aún comparten el mismo hilo. Los desarrolladores de Js aún pueden respirar fácilmente y no preocuparse por la simultaneidad. –

Cuestiones relacionadas