2011-06-07 14 views
7

The new JavaScript engine takes advantage of multiple CPU cores through Windows to interpret, compile, and run code in parallel. - http://technet.microsoft.com/en-us/library/gg699435.aspxMicrosoft dice IE9 tiene paralelo Javascript Representación y Ejecución

y

The Chakra engine interprets, compiles, and executes code in parallel and takes advantage of multiple CPU cores, when available. - http://msdn.microsoft.com/en-us/ie/ff468705.aspx

espera, ¿qué?!? ¿Significa esto que tenemos la ejecución de código JavaScript paralela de múltiples subprocesos (fuera de los trabajadores web) en IE9?

Estoy pensando que esto es sólo un mal truco de marketing, pero le gustaría ver un poco más de información sobre este. ¿Quizás quieren decir que las diferentes ventanas/pestañas/procesos del navegador pueden utilizar múltiples CPU?

+4

Tengo la sensación de que quieren decir "Cuando se incluyen varias secuencias de comandos en una página vamos a cargar e interpretar en paralelo". La ejecución de JavaScript real es sincrónica. – Raynos

+0

+1 a eso, @Raynos. Pero afirman que "ejecución/ejecución" ("ejecución" y "ejecución" son sinónimos, ¿no?) Pueden suceder en paralelo. –

+1

@DavidMurdoch no pueden. La mitad del internet se habría roto y hubiéramos notado estas condiciones de carrera en IE9 hace mucho tiempo. También es comprensible que puedan ejecutar código js en paralelo en pestañas con un hilo js por pestaña. – Raynos

Respuesta

3

conclusiones, basadas en gran parte en los comentarios y por lo tanto proporcionan como una respuesta wiki de la comunidad para que esta cuestión termina con una respuesta real:

Es probable que Microsoft quiere decir que las tareas separadas de (i) la interpretación y/o corriendo; y (ii) la compilación ocurre en paralelo. Es probable que hayan aplicado tecnología como la antigua JVM de HotSpot de Sun para que la máquina virtual de Javascript interprete el código en primera instancia porque puede comenzar a hacer eso al instante. También JIT compila cualquier código que parece usarse con la suficiente frecuencia como para ser un beneficio. Incluso puede tener diferentes niveles de optimización del compilador que marca lentamente. En ese caso, puede estar utilizando múltiples núcleos para interpretar o ejecutar un fragmento de código, mientras que también la compilación arbitrariamente muchos otros, o incluso mientras recompilar y mejor optimización de la misma pieza de código que se está ejecutando.

Sin embargo, también es posible a nivel técnico que pueda realizar un análisis estático para determinar cuándo las devoluciones de llamada son mutuamente independientes en términos de estado, y permitir que esas devoluciones se ejecuten en paralelo si los eventos desencadenantes las llevaron a hacerlo. De esta forma, una máquina virtual con Javascript podría interpretar/ejecutar código en paralelo sin afectar la naturaleza semánticamente serial del lenguaje. Tal sistema sería lógicamente similar al funcionamiento de las CPU superescalares, aunque con una eliminación mucho mayor y con una complejidad significativamente mayor.

Cuestiones relacionadas