Un solo trabajador ejecuta su tarea en la cola, es decir, una tarea a la vez. Prueba el siguiente ejemplo:
<!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
Las tareas se siempre terminadas en orden, es decir primero la lenta, entonces el uno rápida . (Si la tarea se ejecutó en paralelo, la segunda tarea terminaría primero con un margen claro.)
(Para que quede claro: llamar a postMessage siempre bloquea en su contexto de ejecución (como cualquier llamada de función) pero efectivamente devuelve "inmediatamente ", porque publicar el mensaje en sí es una operación muy rápida. Probablemente eso no sea lo que usted pidió.)
Nota: Chrome arroja una excepción de seguridad si intenta cargar el archivo worker.js desde el disco local, funciona en Safari & Firefox.
¿Qué tarea realiza su trabajador? ¿Cálculo? Ajax? –