Cóż, obecnie JavaScript jest głównym graczem we wszystkich technologiach programistycznych, po stronie klienta, dzięki czemu interfejs użytkownika jest lepszy, logika po stronie klienta, na niektórych serwerach WWW, jak logika po stronie serwera
Dodaj do tego fakt, że ludzie (przynajmniej niektórzy z nich) zaczęli przenosić się podczas tworzenia gier internetowych z Flasha na JavaScript i HTML5
Czy nie nadszedł czas, aby obsługiwał wielowątkowość! czy istnieją przeglądarki, które pozwalają na wielowątkowość JavaScript, czy jest dostępny w jakichkolwiek standardach, HTML5 lub przyszłych wersjach?
Odpowiedzi:
Wielowątkowość nie będzie wykonywana w EcmaScript, ale może być ujawniona w środowiskach hosta.
Klasycznymi przykładami są WebWorkers, który pozwala rozkręcić pracownika pracującego w tle, aby pracował i nadużywał
<iframe>
jako sposobu na odrodzenie nowych procesów.Należy zauważyć, że wielowątkowość w JavaScript nie jest potrzebna (są wyjątki, głównie programy związane z grafiką). Nie potrzebujesz wielu wątków, masz już pętlę zdarzeń dla GUI, a renderowanie grafiki (canvas) jest przyspieszane sprzętowo (co oznacza, że GPU renderuje grafikę równolegle dla Ciebie).
Chociaż projekty takie jak webcl są dość ekscytujące.
źródło
NIE
Wielowątkowość jest jedną z najtrudniejszych rzeczy w oprogramowaniu, aby uzyskać właściwy wynik. Istnieje zbyt wiele przypadków narożnych, które naprawdę trudno jest wypracować, gdy kod nie jest deterministyczny. (Mówię o wielowątkowości z blokadami itp.). Ponadto wszystkie różne biblioteki JavaScript są zbudowane przy założeniu, że nie jest wielowątkowy.
Biorąc to pod uwagę, istnieją pracownicy sieci, którzy dają ramy oparte na aktorach do wykonywania operacji na wiele rodzajów przetwarzania. Możesz tworzyć pracowników i przekazywać dane tam i z powrotem za pośrednictwem zdarzeń.
EDYCJA: Innym powodem jest to, że kiedy JavaScript został utworzony, zrobiono to przy założeniu, że będzie on używany do małych zadań, więc nie będzie wbudowana żadna współbieżność. Aby go teraz przerobić, zepsuje dużo kodu. Dodając pracowników internetowych, możliwe było posiadanie systemu, w którym istnieje współbieżność bez pamięci współdzielonej, ale za pomocą aktorów model współbieżności, który okazał się bardzo solidny w wielu innych językach, takich jak Erlang, Scala, Clojure itp.
(JEŚLI nie możesz powiedzieć, że naprawdę nie lubię współbieżności opartej na blokadzie)
źródło
Multi threading is one of the hardest things in software to get right.
- właśnie to zaskoczyłem! Przeglądarka, której używasz, system operacyjny komputera, serwer WWW obsługujący tę stronę - praktycznie każda aplikacja, z której korzystasz na co dzień, jest wielowątkowa. CZY JESTEŚ PEWNY, ŻE OZNACISZ? Jeszcze, aby cię przegłosować, ale zrobię to, jeśli powieszmultithreading is not done because it is hard
otwarcie javascript na wielowątkowość spowoduje więcej problemów niż rozwiązuje:
obecna architektura jest oparta na zdarzeniach jednowątkowych (najczęściej działa w wątku GUI), innymi słowy, z każdym blokiem kodu możesz mieć pewność, że nic w środowisku nie zmieni się od początku do końca, z wyjątkiem tego, co zostało zmienione w kodzie.
gdy tylko zezwolisz na wykonywanie wyprzedzające lub równoległe, ta funkcja zniknie, oznacza to, że musisz zastosować blokady do danych, które chcesz zmutować, a także mieć trudne warunki debugowania, aby uniknąć
możliwe jest wykonanie pseudo-równoległe z wykorzystaniem limitów czasu, co oznacza podzielenie dużych lub długo działających funkcji na porcje atomowe i użycie,
setTimeout(function(){nextstep(args);},1);
aby w razie potrzeby można było uruchomić inne rzeczyźródło
Jakiś czas temu Intel wypuścił River Trail , który umożliwia programowanie równoległe w JavaScript. Jest to jednak tylko wtyczka do Firefoksa i nie słyszałem o mapie drogowej, która wprowadza tę technologię do W3C, a tym bardziej ECMA.
źródło