¿Cuál es exactamente la diferencia entre v8::Isolate y v8:: Context?


¿Cuál es la diferencia/conexión entre estos objetos en V8? ¿Un contexto "pertenece" a un Aislado o viceversa?

Sé que un solo aislado solo se puede acceder por un hilo a la vez (y eso es lo que v8::Locker es para supongo?).

He mirado a través de los documentos, pero parece que no puedo entender estos conceptos - cualquier ayuda es apreciada!

Author: DeX3, 2013-10-15

2 answers

Estoy seguro de que lo siguiente es una simplificación, pero funciona para mí.

Un isolate es una copia independiente del tiempo de ejecución de V8, incluyendo un gestor de montones, un recolector de basura, etc. Solo un hilo puede acceder a un aislado dado a la vez, pero diferentes hilos pueden acceder a diferentes aislamientos simultáneamente.

Sin embargo, un aislamiento no es suficiente para ejecutar scripts. También necesita un objeto global (raíz). A context define un entorno de ejecución de script completo por designar un objeto en el montón de un aislado como un objeto global.

Por lo tanto, no solo pueden "existir" muchos contextos en un aislamiento dado, sino que también pueden compartir cualquiera o todos sus objetos de manera fácil y segura. Eso es porque sus objetos realmente pertenecen al aislado y están protegidos por el bloqueo exclusivo del aislado.

 30
Author: BitCortex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-16 02:44:54

Isolates, como su nombre indica, están completamente cerrados al mundo exterior, por lo que Isolates puede ejecutarse en paralelo ya que son instancias completamente diferentes de V8. Piense en un Isolate como un sandbox a un entorno de ejecución V8.

Ahora dentro de un Isolate, es probable que tenga numerosas aplicaciones JavaScript no relacionadas que se ejecutan simultáneamente. JavaScript proporciona una gran cantidad de instalaciones de lenguaje a nivel global, y tener múltiples aplicaciones no relacionadas con estos "singletons" no es una buena idea. Tan dentro de una instancia de V8 llamada Isolate, puede definir múltiples Contexts para que las aplicaciones no relacionadas puedan hacer lo que necesitan hacer sin interferir entre sí.

Esta no es una analogía perfecta, pero si conoce Java web stuff, imagine varias instancias de Tomcat desplegadas en la misma máquina y luego cada instancia de Tomcat ejecutando aplicaciones separadas con sus propios contextos web y web.xml. Es algo así.

Espero que eso ayude.

 31
Author: Vidya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-15 14:46:09