motor machine google features engine code chrome blog v8 embedded-v8

google - v8 virtual machine



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

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

Un aislamiento es una copia independiente del tiempo de ejecución de V8, incluido un administrador de almacenamiento dinámico, un recolector de basura, etc. Solo un subproceso puede acceder a un aislado dado a la vez, pero diferentes subprocesos 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). Un contexto define un entorno de ejecución de script completo al designar un objeto en el montón de un aislado como un objeto global.

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

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

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

He revisado los documentos pero parece que no puedo entender estos conceptos, ¡cualquier ayuda es apreciada!


Isolates , como su nombre indica, están completamente cerrados al mundo exterior, por lo que los Isolates pueden ejecutarse en paralelo, ya que son instancias diferentes de V8 por completo. Piense en un Isolate como una caja de arena - un entorno de tiempo de ejecución V8.

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

Esta no es una analogía perfecta, pero si conoce Java, imagínese varias instancias de Tomcat implementadas 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 ayude.