Proszę rozważyć następujący kod i wyjaśnienia od tego tutoriala Mozilla "Using web workers":Warunki wyścigu z pracownikami WWW podczas ustawiania obsługi wiadomości?
var myWorker = new Worker('my_worker.js');
myWorker.onmessage = function(event) {
print("Called back by the worker!\n");
};
Linia 1 w tym przykładzie tworzy i uruchamia wątek pracowników. Linia 2 ustawia moduł obsługi wiadomości dla pracownika na funkcję, która jest wywoływana, gdy pracownik wywołuje własną funkcję postMessage().
Wątek jest uruchamiany w momencie wywołania konstruktora Worker. Zastanawiam się, czy może istnieć warunek wyścigu na ustawienie obsługi onmessage. Na przykład, jeśli pracownik WWW wysyła wiadomość przed ustawieniem onmessage.
Czy ktoś wie o tym więcej?
Aktualizacja:
Andrey wskazał, że pracownik internetowej powinny rozpocząć swoją pracę, gdy odbiera wiadomość, jak na przykład Fibonacciego w samouczku Mozilla. Ale czy to nie tworzy nowego warunku wyścigu podczas ustawiania procedury obsługi komunikatów w mechanizmie WWW?
Na przykład:
Głównym scenariusz:
var myWorker = new Worker('worker.js');
myWorker.onmessage = function(evt) {..};
myWorker.postMessage('start');
Skrypt pracownik internetowej ('worker.js')
var result = [];
onmessage = function(evt) {..};
a następnie rozważyć następującą ścieżkę wykonanie:
main thread web worker
var worker = new Worker("worker.js");
var result = [];
myWorker.onmessage = ..
myWorker.postMessage('start');
onmessage = ..
Th e "var result = []" linia może zostać pominięta, nadal będzie ten sam efekt.
I to jest poprawna ścieżka wykonywania, próbowałem go przez ustawienie limitu czasu w przeglądarce internetowej! W tej chwili nie widzę, jak korzystać z pracowników internetowych bez wpadania w warunki wyścigowe ?!
Link do listy mailingowej jest teraz uszkodzony. Każdy pomysł, gdzie przeczytać wątek, lub na przemian, były jakieś garsony? – HRJ
@ HRJ Niestety, nie mogę znaleźć zarchiwizowanej wersji wątku. Ale nie ma gotcha, kolejka wiadomości zapewnia, że nie musisz się martwić o warunki wyścigu. – tsauerwein