2010-05-10 15 views
5

मान लीजिए मैं कोडगूगल जावास्क्रिप्ट 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; 

} 

का निम्न भाग यह सही है कि इस कोड का उपयोग कर एक से अधिक थ्रेड पर अमल नहीं किया जा सकता है? ऐसा लगता है कि HandleScope मल्टीथ्रेड किए गए अनुप्रयोगों में उपयोग करने के लिए डिज़ाइन नहीं किया गया है। मैं v8::Locker और v8::Unlocker methodes उपयोग कर सकते हैं लेकिन यह है कि हमेशा इस रूप में मेरे निष्पादन निशान देना होगा:

t1: a = 1 
t1: b = 2 

t2: a = 1 
t2: b = 2 

मुझे आशा है कि कोई मुझे इस कोड थ्रेड ताकि संभावित निष्पादन का पता लगाने के लिए इस तरह हो सकता है हो रही है पर एक संकेत दे सकते हैं:

t1: a = 1 
t2: a = 1 

t1: b = 2 
t2: b = 2 

उत्तर

1

this post पर देखें। वी 8 इंजन में लॉकर क्लास है, जो आपको अपने कोड को प्रीमिट करने देता है। इसके साथ आप कई धागे का उपयोग कर सकते हैं।

2

v8 issue 510 के अनुसार, कुछ महीनों पहले ट्रंक में "Isolates" नामक एक सुविधा को जोड़ा गया था। यह एक प्रक्रिया में v8 के एकाधिक (गैर-इंटरैक्टिंग) उदाहरणों की अनुमति देनी चाहिए।

संबंधित मुद्दे