Cześć, usiadłem ostatnio trochę więcej do NodeJS ale chciałbym najpierw ogarnąć trochę podstaw działania samej V8 od Chrome'a na której Node stoi. No i tak sobie szukam i szukam czegoś po necie na temat zasad działania pętli zdarzeń, tego dlaczego Node jest jednowątkowy, czym są callbacki, event emmitery, itd. I w sumie sam nie wiem czy dobrze sobie na te pytania sobie odpowiadam, dlatego wypisze tutaj pytania i odpowiedzi i prosiłbym o weryfikacje i ewentualne poprawienie mnie w swoim myśleniu
-
Dlaczego Node jest jednowątkowy?
Generalnie przez wzgląd na to, że praca na jednym wątku jest dużo bardziej wydajna niż praca na kilku. Wykonując przetwarzanie asynchroniczne(asynchroniczność na jednym wątku...) w pojedynczym wątku przy typowych obciążeniach sieci Web, można osiągnąć większą wydajność -
Czym jest pętla zdarzeń?
Każde nasze żądanie do serwera jest naszym I/O(czyli takim zdarzeniem typu input/ouptput tj. naciśnięcie klawisza i wywołanie operacji) czyli eventem, ten nasz event jest obsługiwany przez EventEmmiter który kolejno jest wrzucany do kolejki zdarzeń skąd ląduję w naszej pętli zdarzeń. W pętli zdarzeń jest sprawdzane między innymi to czy nasza operacja jest nie blokująca(nie blokująca czyli taka, która nie blokuje wywoływania innych operacji), jeśli dana operacja jest nieblokujące to ta operacja zostaje przetwarzana a później dodana do pętli zdarzeń która odsyła tę odpowiedź do klienta. Natomiast jeśli operacja jest blokująca, to z puli wewnętrznych wątków zostaje do naszej operacji przydzielony pojedynczy wątek odpowiedzialny za wykonanie określonego żądania, gdzie po wykonaniu operacji wątek jest zwalniany, a później operacja wraca do pętli zdarzeń by odesłać odpowiedź do klienta. -
Czym jest callback?
Callback jest niczym innym jak funkcją wywoływaną po jakiejś operacji mającej na celu uniknąć blokowania operacji, Node w dużym stopniu polega na wywołaniach zwrotnych ponieważ ... (właśnie, dlaczego?)...
Szukam teraz eksperta od NodeJS który pokaże mi, że się mylę we wszystkim i uprzejmie naprowadzi mnie na poprawne myślenie w kwestii niskopoziomowych operacji w NodeJS :)
Dzięki za każdą odpowiedz!