Por favor, considere el siguiente código y la explicación de este tutorial Mozilla "Using web workers":¿Condición de carrera con los trabajadores de la web al configurar el controlador de mensajes?
var myWorker = new Worker('my_worker.js');
myWorker.onmessage = function(event) {
print("Called back by the worker!\n");
};
línea 1 en este ejemplo crea y comienza a funcionar el subproceso de trabajo. La línea 2 establece el controlador onmessage para el trabajador en una función que es llamada cuando el trabajador llama a su propia función postMessage().
El hilo se inicia en el momento en que el trabajador se llama al constructor. Me pregunto si podría haber una condición de carrera al configurar el controlador onmessage. Por ejemplo, si el trabajador web publica un mensaje antes de configurar onmessage.
¿Alguien sabe más acerca de esto?
Actualización:
Andrey señaló que el trabajador web debe comenzar su labor, cuando se recibe un mensaje, al igual que en el ejemplo de Fibonacci en el tutorial de Mozilla. ¿Pero eso no crea una nueva condición de carrera al configurar el controlador onmessage en el trabajador web?
Por ejemplo:
El script principal:
var myWorker = new Worker('worker.js');
myWorker.onmessage = function(evt) {..};
myWorker.postMessage('start');
El guión trabajador web ('') worker.js
var result = [];
onmessage = function(evt) {..};
Y luego considerar la siguiente ruta de ejecución:
main thread web worker
var worker = new Worker("worker.js");
var result = [];
myWorker.onmessage = ..
myWorker.postMessage('start');
onmessage = ..
Th e "var result = []" se puede omitir la línea, seguirá teniendo el mismo efecto.
Y esta es una ruta de ejecución válida, ¡la probé configurando un tiempo de espera en el trabajador web! Por el momento no puedo ver, ¿cómo usar web workers sin correr en condiciones de carrera?
El enlace a la lista de correo ahora está roto. Alguna idea de dónde leer el hilo o, alternativamente, ¿hubo algún problema? – HRJ
@HRJ Lo siento, no puedo encontrar una versión archivada del hilo. Pero no hay trampas, una cola de mensajes se asegura de que no tenga que preocuparse por las condiciones de carrera. – tsauerwein