Рабочие по сети - Как они работают?

Я пытаюсь понять этот пример:

HTML (основной код):

     
     Test threads fibonacci  
       

     

JavaScript (код рабочего):

   var results = [];  

   function resultReceiver(event) {  
     results.push(parseInt(event.data));  
     if (results.length == 2) {  
       postMessage(results[0] + results[1]);  
     }  
   }  

   function errorReceiver(event) {  
     throw event.data;  
   }  

   onmessage = function(event) {  
     var n = parseInt(event.data);  

     if (n == 0 || n == 1) {  
       postMessage(n);  
       return;  
     }  

     for (var i = 1; i <= 2; i++) {  
       var worker = new Worker("fibonacci.js");  
       worker.onmessage = resultReceiver;  
       worker.onerror = errorReceiver;  
       worker.postMessage(n - i);  
     }  
  };  

У меня есть следующие вопросы:

  • Когда точно код рабочего начинает работать? Сразу после выполнения var worker = new Worker("fibonacci.js"); ?

  • Это верное это onmessage = function(event) { ... } присвоение в коде рабочего будет выполняться прежде worker.postMessage("5"); в основном коде?

  • Могут глобальные переменные доступа кода рабочего, которые определяются в основном коде (как worker)?

  • Могут основные глобальные переменные доступа кода, которые определяются в коде рабочего (как results)?

  • Это кажется мне этим worker.onmessage = function(event) {...} в основном коде имеет то же значение как onmessage = function(event) {...} в коде рабочего (который является onmessage обработчик событий рабочего). Где я неправильно? Каково различие между ними?

  • Что должен на самом деле сделать этот код? Когда я выполняю его сюда, это просто печатает "5". Это то, что это, как предполагается, делает, или я пропускаю что-то?

Большое спасибо!

6
задан Misha Moroshko 24 May 2010 в 11:10
поделиться