Я пытаюсь понять этот пример:
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". Это то, что это, как предполагается, делает, или я пропускаю что-то?
Большое спасибо!