2010-05-10 17 views
5

Załóżmy, że mam następujący fragment koduGoogle JavaScript V8 - wielowątkowość

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; 

} 

Czy to prawda, że ​​nie można wykonać tego kodu przy użyciu wielu wątków? Wygląda na to, że HandleScope nie jest przeznaczony do stosowania w aplikacjach wielowątkowych. mogę używać v8::Locker i v8::Unlocker methodes ale które zawsze dają mi ślady wykonanie jak to:

t1: a = 1 
t1: b = 2 

t2: a = 1 
t2: b = 2 

Mam nadzieję, że ktoś może mi dać wskazówkę na uzyskiwanie ten kod wielowątkowy, tak że możliwe ślad wykonanie mogłoby słuszne:

t1: a = 1 
t2: a = 1 

t1: b = 2 
t2: b = 2 

Odpowiedz

1

Spójrz na this post. Silnik v8 ma klasę Locker, która pozwala ci wywłaszczyć kod. Dzięki temu możesz korzystać z wielu wątków.

2

Zgodnie z v8 issue 510, funkcja o nazwie "Izoluje" została dodana do bagażnika kilka miesięcy wstecz. To powinno zezwalać na wiele (bez interakcji) instancji v8 w jednym procesie.