Один работник выполняет свою задачу в очереди, то есть одна задача по времени. Попробуйте следующий пример:
<!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 выдает исключение безопасности, если вы пытаетесь загрузить work.js с локального диска, работает в Safari & Firefox.
Какую задачу выполняет ваш рабочий? Исчисление? Ajax? –