web-dev-qa-db-ja.com

v8 :: Isolateとv8 :: Contextの違いは何ですか?

V8のこれらのオブジェクト間の違い/接続は何ですか?コンテキストは分離に「所属」しますか、またはその逆ですか?

単一のIsolateには一度に1つのスレッドしかアクセスできないことを知っています(それがv8 :: Lockerの目的です)。

私はドキュメントを調べましたが、これらの概念を理解できていないようです-どんな助けでもありがたいです!

40
DeX3

以下は簡略化されていると思いますが、私にとってはうまくいきます。

isolateは、ヒープマネージャー、ガベージコレクターなど、V8ランタイムの独立したコピーです。特定のアイソレートに一度にアクセスできるスレッドは1つだけですが、異なるスレッドが同時に異なるアイソレーターにアクセスできます。

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

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

41
BitCortex

Isolatesは、その名前が示すように、完全に外界に閉じているため、IsolatesはV8の完全に異なるインスタンスであるため、並行して実行できます。 Isolateをサンドボックス(V8ランタイム環境)と考えてください。

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

これは完全な類推ではありませんが、Java Webに関する知識がある場合は、Tomcatの複数のインスタンスが同じマシンにデプロイされ、Tomcatの各インスタンスが独自のWebコンテキストとWebで別々のアプリケーションを実行していると想像してください。 .xmlのようなものです。

お役に立てば幸いです。

39
Vidya