2013-10-15 13 views
24

V8でのこれらのオブジェクトの違い/接続は何ですか?コンテキストがアイソレートに「属している」、またはその逆の場合v8 :: Isolateとv8 :: Contextの違いは何ですか?

私は、一度に1つのスレッドだけが1つのアイソレートにアクセスできることを知っています(そして、それはv8 :: Lockerと同じですか?)。

私はドキュメントを見てきましたが、私はこれらの概念を把握できていないようです。

答えて

26

私は次のことが簡素化されていると確信していますが、それは私のために動作します。

を分離は、1つのスレッドだけが一度に与えられた分離株にアクセスすることができるが、異なるスレッドが異なるが、同時に隔離アクセスすることができる等、ヒープマネージャ、ガベージコレクタを含むV8ランタイムの独立したコピーです。

ただし、分離スクリプトではスクリプトを実行するには不十分です。また、グローバル(ルート)オブジェクトが必要です。 A コンテキストは、分離オブジェクトのヒープ内のオブジェクトをグローバルオブジェクトとして指定することによって、完全なスクリプト実行環境を定義します。

したがって、特定の分離株には多くのコンテキストが存在するだけでなく、そのオブジェクトの一部または全部を簡単かつ安全に共有することができます。これは、オブジェクトが実際に分離に属し、分離の排他ロックによって保護されているためです。

26

Isolatesは、その名前が示唆しているとおり、完全に外部に閉じられているため、Isolatesは完全にV8の別のインスタンスであるため並列で実行できます。 IsolateをV8ランタイム環境のサンドボックスと考えてください。

Isolateの中で、無関係のJavaScriptアプリケーションが同時に実行されている可能性があります。 JavaScriptは、多くのグローバルレベルの言語機能を提供しており、これらの「シングルトン」を混乱させた無関係なアプリケーションを複数持つことは良い考えではありません。したがって、Isolateと呼ばれるV8のインスタンス内では、無関係のアプリケーションが互いに干渉することなく、必要な処理を行うことができるように、複数のContextsを定義することができます。

これは完璧なアナロジーではありませんが、Java Webを知っているならば、Tomcatの複数のインスタンスが同じマシンに配備され、Tomcatの各インスタンスが独自のWebコンテキストとweb.xmlを持つ別々のアプリケーションを実行することを想像してください。それはそんな感じです。

希望に役立ちます。

+0

分離株は同じプラットフォーム情報を共有しているため、完全に分離されていません。彼らは "完全に"違うわけではありません。 – xaxxon

関連する問題