HomeO mnie

Timery w Event Loop

By Robert Duraj
Published in JavaScript
June 06, 2024
1 min read
Timery w Event Loop

💡 Wiedzieliście, że w Node.js mamy do dyspozycji potężne usprawnienie, które otwiera nowe rozdanie? Importując setTimeout bądź setInterval z paczki “node:timers/promises” są one od razu opakowane w Promise! 😅

🤔 Ale jak to się dzieje, że setTimeout w ogóle działa?!

Node.js jest jednowątkowy - silnik V8, na którym działa, obsługuje w głównym wątku tylko jedną operację naraz. Zrobiłoby się niezręcznie, gdyby każda akcja I/O blokowała nam całkowicie aplikację, prawda? Dlatego twórcy wdrożyli wzorzec event loop. Mechanizm ten dla Node.js w każdym cyklu wykonuje kilka istotnych akcji. Jedną z nich jest sprawdzanie timerów - czyli funkcji setTimeout oraz setInterval, czy “ich czas już przypadkiem nie nadszedł”.

Ale skąd event loop to wie? ⏰

Event loop sam w sobie nie posiada “wiedzy” o tym, że jakiś czas już nadszedł, by obsłużyć callback z timera. Z zasady jest tylko pętlą wywoływaną przez różne zdarzenia.

Gdy setTimeout jest uruchamiany, obliczany jest czas, kiedy ma on wrócić na kolejkę wraz ze swoim callbackiem. Za te kalkulacje i zarejestrowanie tego zdarzenia odpowiedzialna jest niskopoziomowa biblioteka libuv. To ona zarządza asynchronicznymi operacjami I/O, timerami systemowymi, etc. na potrzeby Node.js. I to ona, dzięki swojej wewnętrznej pętli zintegrowanej z systemem operacyjnym, informuje, że to już najwyższy czas na uruchomienie naszego callbacka.

libuv sama w sobie nie stanowi mechanizmu event loop, a jedynie dostarcza potrzebne mechanizmy przez swoje API, by Node.js mógł się nimi posiłkować i obsługiwać asynchroniczne operacje.

Gdzie dokładnie libuv znajduje się w naszej node’owej układance - o tym już wkrótce! 😉


Tags

#nodejs#javascript

Share

Previous Article
Strumieniowanie na ratunek

Robert Duraj

Software Engineer

Related Posts

Symbol - brzydkie kaczątko ES6
September 15, 2023
3 min
© 2024, All Rights Reserved.
Powered By

Social Media

linkedingithubtwitter