2010-05-10 15 views
5

Supponiamo che io ho il seguente pezzo di codiceGoogle Javascript V8 - multithreading

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; 

} 

E 'vero che non si può eseguire questo codice con thread multipli? Sembra che lo HandleScope non sia progettato per essere utilizzato in applicazioni multithread. posso usare il v8::Locker e v8::Unlocker methodes ma che sarebbe sempre mi danno tracce di esecuzione come questo:

t1: a = 1 
t1: b = 2 

t2: a = 1 
t2: b = 2 

Spero che qualcuno mi può dare un suggerimento su come ottenere questo codice multithreaded in modo che un eventuale traccia di esecuzione potrebbe in questo modo:

t1: a = 1 
t2: a = 1 

t1: b = 2 
t2: b = 2 

risposta

1

Vedere this post. Il motore v8 ha una classe Locker che ti consente di anticipare il codice. Con questo è possibile utilizzare più thread.

2

Secondo v8 issue 510, una funzionalità denominata "Isolates" è stata aggiunta al trunk alcuni mesi indietro. Ciò dovrebbe consentire più istanze (non interagenti) di v8 in un singolo processo.