6

次のコードがあるとします

bool run (void)
{
    HandleScope hande_scope;
    Handle<String> source;
    Local<Script> script;
    Persistent<Context> context;

    context = Context::New();
    Context::Scope context_scope(context);

    script = Script::Compile("var a = 1; var b = 2;");
    Local<Value> result = script->Run();

    if (result.IsEmpty())
        return false;
    else
        return true;

}

複数のスレッドを使用してこのコードを実行できないというのは本当ですか?HandleScopeマルチスレッドアプリケーションで使用するように設計されていないようです。v8::Lockerandメソッドを使用できますv8::Unlockerが、これにより常に実行トレースが次のように表示されます。

t1: a = 1
t1: b = 2

t2: a = 1
t2: b = 2

誰かがこのコードをマルチスレッド化するためのヒントを教えてくれるといいのですが、実行トレースの可能性は次のようになります。

t1: a = 1
t2: a = 1

t1: b = 2
t2: b = 2
4

2 に答える 2

2

v8 issue 510によると、「Isolates」と呼ばれる機能が数か月前にトランクに追加されました。これにより、単一のプロセスで v8 の複数の (相互作用しない) インスタンスを許可する必要があります。

于 2012-02-04T04:18:03.967 に答える
1

この投稿を見てください。v8 エンジンには、コードをプリエンプトできる Locker クラスがあります。これにより、複数のスレッドを使用できます。

于 2010-05-18T12:26:03.133 に答える