Один работник выполняет свою задачу в очереди, то есть одну задачу за раз.Попробуйте следующий пример:
<!DOCTYPE html>
<script>
var worker = new Worker('worker.js');
worker.postMessage({ task: 1, iterations: 100 }); // very slow task
worker.postMessage({ task: 2, iterations: 1 }); // very quick task
worker.onmessage = function(event) {
console.log(event.data);
};
</script>
worker.js:
self.onmessage = function(event) {
for (var i = 0; i < event.data.iterations * 1000 * 1000 * 10; i++) {};
self.postMessage("Finished task " + event.data.task);
}
Ouput:
Finished task 1
Finished task 2
Задачи всегда выполняются по порядку, т.е. сначала медленноодин, потом быстрый.(Если бы задача выполнялась параллельно, вторая задача сначала заканчивалась бы с чистым полем.)
(Просто для ясности: вызов postMessage всегда блокируется в контексте выполнения (как любой вызов функции), но эффективно возвращает«немедленно», поскольку отправка самого сообщения - это очень быстрая операция. Вероятно, это не то, что вы просили.)
Примечание. Chrome выдает исключение безопасности, если вы пытаетесь загрузить worker.js с локального диска, работает вSafari & Firefox.