2010-05-10 15 views
5

Supongamos que tengo el siguiente fragmento de códigoGoogle 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; 

} 

¿Es cierto que no se puede ejecutar este código utilizando múltiples hilos? Parece que HandleScope no está diseñado para ser utilizado en aplicaciones multiproceso. puedo usar el v8::Locker y v8::Unlocker methodes pero que siempre me daría trazas de ejecución ya que esto:

t1: a = 1 
t1: b = 2 

t2: a = 1 
t2: b = 2 

espero que alguien me puede dar una pista en conseguir este código multiproceso por lo que una posible traza de ejecución podría desea:

t1: a = 1 
t2: a = 1 

t1: b = 2 
t2: b = 2 

Respuesta

1

Mire this post. El motor v8 tiene una clase Locker, que le permite adelantarse a su código. Con esto puedes usar múltiples hilos.

2

De acuerdo con v8 issue 510, una característica llamada "Aislamientos" se agregó al baúl hace algunos meses. Esto debería permitir instancias múltiples (sin interacción) de v8 en un solo proceso.