谷歌的Javascript v8 - 多线程处理

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::Lockerv8::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
2个回答

2
根据 v8 issue 510,几个月前在代码库中添加了一个名为“Isolates”的特性。这应该允许在单个进程中有多个(不相互干扰的)v8实例。

1
看看这篇文章。V8引擎有一个Locker类,可以让您抢先执行代码。这样一来,您就可以使用多个线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接