Состояние состязания с веб-рабочими при установке onmessage обработчика?

Рассмотрите следующий код и объяснение из этого учебного руководства Mozilla "Используя веб-рабочих":

var myWorker = new Worker('my_worker.js');
myWorker.onmessage = function(event) {
  print("Called back by the worker!\n");
};

Строка 1 в этом примере создает и начинает выполнять рабочий поток. Строка 2 набора onmessage обработчик для рабочего к функции, которая вызвана, когда рабочий называет ее собственное постсообщение () функцией.

Поток запускается в момент, конструктора Рабочего вызывают. Интересно, могло ли быть состояние состязания при установке onmessage обработчика. Например, если веб-рабочий добавляет сообщение, прежде чем onmessage будет установлен.

Кто-то знает больше об этом?

Обновление:

Andrey указал, что веб-рабочий должен запустить его работу, когда она получает сообщение, как в примере Fibonacci в учебном руководстве Mozilla. Но разве который не создает новое состояние состязания при установке onmessage обработчика в веб-рабочем?

Например:

Основной сценарий:

var myWorker = new Worker('worker.js');
myWorker.onmessage = function(evt) {..};
myWorker.postMessage('start');

Веб-сценарий рабочего ('worker.js')

var result = [];
onmessage = function(evt) {..};

И затем рассмотрите следующий путь выполнения:

main thread                                  web worker
var worker = new Worker("worker.js");
                                             var result = [];
myWorker.onmessage = ..
myWorker.postMessage('start');
                                             onmessage = ..

"Результат var = []" строка может быть не учтен, это все еще будет тот же эффект.

И это - допустимый путь выполнения, я испытал его путем установки тайм-аута в веб-рабочем! В данный момент я не вижу, как использовать веб-рабочих, не сталкиваясь с условиями состязания?!

5
задан tsauerwein 13 July 2010 в 06:58
поделиться