np.Czy webworker jest wielowątkowy?
worker.postMessage(data1);
worker.postMessage(data2);
i wewnątrz webwoker, zakładając tam ilość spraw do czynienia, by worker.postMessage(data2)
blok przed zakończeniem data1
np.Czy webworker jest wielowątkowy?
worker.postMessage(data1);
worker.postMessage(data2);
i wewnątrz webwoker, zakładając tam ilość spraw do czynienia, by worker.postMessage(data2)
blok przed zakończeniem data1
Pojedynczy pracownik wykonuje swoje zadania w kolejce, to znaczy jedno zadanie na raz. Spróbuj następujący przykład:
<!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
Zadania są zawsze wykończone w kolejności, czyli najpierw powolny jeden, potem szybki jeden . (Jeśli zadanie zostało wykonane równolegle, drugie zadanie zakończyłoby się najpierw z wyraźnym marginesem.)
(Tylko dla jasności: wywołanie postMessage zawsze blokuje w swoim kontekście wykonania (jak każde wywołanie funkcji), ale skutecznie zwraca "natychmiast .”, ponieważ zaksięgowania samej wiadomości jest bardzo szybkie działanie to nie jest chyba to, co prosiłeś)
. Uwaga: Chrome rzuca wyjątek zabezpieczeń, jeśli starają się załadować worker.js z lokalnego dysku, pracuje w Safari & Firefox.
Jakie zadanie wykonuje pracownik? Obliczenie? Ajax? –