[Freeswitch-dev] V8 Threads

Jan Berger jan.berger at video24.no
Wed Jul 7 01:39:26 PDT 2010


Posting a code-snip that show you how to multi-thread "hello World" in V8.
It isn't that complex once you understand that V8 contain it's own preemtive
scheduler and is part operating system in nature.

 

The big upside is the next step - because threads are a budget on any PC,
and we need the threads for the voice transport in FS - so I will use a pool
with 10 processes x 10 threads and throw a RTOS scheduler in front of each
thread - meaning each thread will in reality proceess 100-1000 calls. This
will solve what have been my main heacache so far - the CCXML/VXML threading
budget. It should also work smoothly with FS as it don't start competing
with FS on the thread budget.

 

The only drawback is that this will not run on a Sparc, but well . . . 

 

      // Lock V8 so we single thread access to V8. You MUST

      // use the V8 Locker scope for this

      v8::Locker locker;

 

      // Start the preemtive scheduler with a 10ms timer. This only

      // needs calling once, but adding it here don't hurt.

      locker.StartPreemption(10);

 

      // Set scope.

      HandleScope handle_scope;

 

      // Create this threads contect inside the scope. 

      Persistent<Context> context = Context::New();

      Context::Scope context_scope(context);

 

      // create a source-code variable to hold javascript. 

      Handle<String> source = String::New("for(j = 0; j<100;j++)\n"

"i='Hello' + ', World!'");

 

      // So far we have just created the basics we need. 

      // Now we will start a rt-loop where we compile & run.

      Handle<Script> script;

      Handle<Value> result;

 

      for(x=1;;x++)

      {

            // we need to handle the new scope so V8 knows when

            // it can re-use memory

            HandleScope handle_scope;

 

            // and we compile

            script = Script::Compile(source);

 

            // and we execute

            result = script->Run();

 

Jan

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20100707/9452f6ee/attachment-0001.html 


More information about the FreeSWITCH-dev mailing list