Bitte beachten Sie die folgenden Code und die Erklärung von diesem Mozilla Tutorial "Using web workers":Race-Condition mit Web-Worker beim Einrichten eines Nachrichtenhandlers?
var myWorker = new Worker('my_worker.js');
myWorker.onmessage = function(event) {
print("Called back by the worker!\n");
};
Linie 1 in diesem Beispiel erzeugt und den Worker-Thread laufen beginnt. Zeile 2 legt den onmessage-Handler für den Worker zu einer Funktion fest, die aufgerufen wird, wenn der Worker seine eigene postMessage() - Funktion aufruft.
Der Faden wird der Worker Konstruktor aufgerufen in dem Moment gestartet. Ich frage mich, ob es eine Race-Condition bei der Einstellung der onMessage Handler geben könnte. Wenn beispielsweise der Web-Mitarbeiter eine Nachricht einreicht, wird eine Nachricht gesetzt.
Weiß jemand mehr darüber?
Update:
Andrey wies darauf hin, dass der Web-Arbeiter seine Arbeit aufnehmen soll, wenn es eine Nachricht empfängt, wie in dem Fibonacci-Beispiel in den Mozilla-Tutorial. Aber schafft das nicht eine neue Race-Bedingung beim Setzen des On-Messaging-Handlers im Web-Worker?
Zum Beispiel:
Das Hauptskript:
var myWorker = new Worker('worker.js');
myWorker.onmessage = function(evt) {..};
myWorker.postMessage('start');
Der Web-Worker-Skript ('worker.js')
var result = [];
onmessage = function(evt) {..};
Und dann sollten Sie die folgenden Ausführungspfad:
main thread web worker
var worker = new Worker("worker.js");
var result = [];
myWorker.onmessage = ..
myWorker.postMessage('start');
onmessage = ..
Th e "var result = []" Zeile kann weggelassen werden, es wird immer noch der gleiche Effekt sein.
Und dies ist ein gültiger Ausführungspfad, habe ich es ausprobiert, indem Sie eine Zeitüberschreitung im Web Worker setzen! Im Moment kann ich nicht sehen, wie ich Webarbeiter benutze, ohne in Rennbedingungen zu geraten ?!
Der Link zur Mailingliste ist jetzt unterbrochen. Irgendeine Idee, wo man den Faden oder abwechselnd lesen konnte, gab es irgendwelche Schwierigkeiten? – HRJ
@HRJ Ich kann keine archivierte Version des Threads finden. Aber es gibt keine Probleme, eine Nachrichtenwarteschlange sorgt dafür, dass Sie sich keine Sorgen um die Rennbedingungen machen müssen. – tsauerwein