Расы с веб-работниками при настройке обработчика сообщений? - PullRequest
5 голосов
/ 09 июля 2010

Пожалуйста, рассмотрите следующий код и объяснение из этого урока Mozilla «Использование веб-работников» :

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

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

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

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

Обновление:

Андрей указал, что веб-работник должен начать свою работу, когда он получит сообщение, как в примере Фибоначчи в учебном пособии по Mozilla.Но разве это не создает новое условие гонки при установке обработчика сообщений в веб-работнике?

Например:

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

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 result = [] "линия может быть опущена, это все равно будет тот же эффект.

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

1 Ответ

4 голосов
/ 05 августа 2010

Ответ таков: основной сценарий и веб-работник имеют очередь MessagePort , которая собирает сообщения до того, как начальный рабочий сценарий вернет .

. Подробнеесм. эту ветку в списке рассылки справки WHATWG: http://lists.whatwg.org/pipermail/help-whatwg.org/2010-August/000606.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...