Czy można mówić, że język javascript jest asynchroniczny?

0

Czy można mówić, że język javascript jest asynchroniczny? Czy w teorii jednak on jest synchroniczny? Wiadomo asynchroniczność obsługuje pętla wydarzeń Event Loop, ale w takim razie JavaScript sam w sobie jest synchroniczny czy asynchroniczny?

2

A nie lepiej powiedziec po prostu że JS wspiera asynchroniczność?
Żeby powiedzieć że język X jest asynchroniczny trzebaby mieć definicję języka asynchronicznego. A taka pewnie nie istnieje :(
Wresztą wiele rzeczy w JSie jest synchronicznych jak var a = 2 + 3 czy 'Hello World!'.split(' '). To by znaczyło że JS jest też językiem synchronicznym. Co by znaczyło że JS jest językiem synchronicznym i asynchronicznym jednocześnie :D
Ta nazwa "język asynchroniczny" brzmi mi trochę marketingowo :P

UPDATE:
Jest nawet definicja Synchronicznego języka programowania ale znaczy ona zupełnie co innego niż bym zakładał :D

0

Nie ma czegoś takiego jak język asynchroniczny/synchroniczny. "Asynchroniczność" w rozumieniu tego jak wygląda programowanie w NodeJS to taka cecha całego środowiska(nie samego JSa), która sprawia, że wszystkie operacje IO są odpalane gdzieś na boku nie blokując wątku (który jest jeden). Przez to musisz używać callbacków albo async/await po każdej operacji IO, żeby środowisko uruchomieniowe wiedziało co robić dalej jak operacja IO się za kończy, więc w NodeJS jest asynchroniczny w kontekście operacji IO. W aplikacjach, gdzie większość czasu to IO (nie obliczenia wykorzystujące procesor) pozwala to maksymalnie wykorzystać jeden wątek do obsługi wielu zapytań sieciowych na raz. https://bytearcher.com/articles/why-in-nodejs-lot-of-asynchronous-operations/

0

JavaScript sam w sobie jest synchroniczny i jednowątkowy. Microsoft zaprojektował obiekt XMLHttpRequest, zaadaptowany później przez przeglądarkę Mozilla. Pojawienie się tego obiektu zapoczątkowało technikę AJAX (skrót od asynchroniczny JavaScript i XML), która umożliwiała asynchroniczne pobieranie danych z serwera. Natomiast od ES6 w języku pojawiły się Promise, a od ES8 wsparcie dla programowania asynchronicznego za pomocą async await.

Obecnie język wspiera już doskonale pisanie asynchronicznego kodu.

Poza tym wielowątkowość i asynchroniczność wspiera V8 silnik uruchomieniowy JS w przeglądarce Chrome, a także oparty na na tym silniku NodeJS.

1

Zależy jak zdefiniować asynchroniczność. Jeśli rozumiemy przez to unikanie usypiania wątku to JS jest w praktyce mocno asynchroniczny. W standardowym JSie nie ma nawet metod do usypiania wątku, więc trzeba sobie radzić inaczej. Nawet gdyby ktoś próbował emulować usypianie wątku, np. przez busy loop, to szybko by przestał, bo w JSie jest tylko jeden wątek. Ten jeden jedyny wątek jest używany także do odświeżania GUI i obsługi zdarzeń z niego, więc gdy się go zablokuje (tym busy-loopem) to całość aplikacji dostaje freeze'a na pewien czas. Freeze'ów oczywiście nie chcemy :) Mimo wszystko taka definicja (asynchroniczność = unikanie usypiania wątku) jest co najwyżej średnio przydatna. Po co chcesz tak kategoryzować języki? Podejść do asynchroniczności jest wiele, ten świat jest mocno niebinarny :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1