Google Javascript v8 - многопоточность - PullRequest
5 голосов
/ 10 мая 2010

Предположим, у меня есть следующий фрагмент кода

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::Locker и 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

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Согласно сообщению v8 510 , функция, называемая «Изоляты», была добавлена ​​в магистраль несколько месяцев назад. Это должно разрешить несколько (не взаимодействующих) экземпляров v8 в одном процессе.

1 голос
/ 18 мая 2010

Посмотрите на этот пост . Движок v8 имеет класс Locker, который позволяет выгрузить ваш код. При этом вы можете использовать несколько потоков.

...