Czy NodeJS jest naprawdę jednowątkowy?

Node.js rozwiązuje "jeden wątek na problem połączenia", umieszczając model oparty na zdarzeniach w jego jądrze, używając pętli zdarzeń zamiast wątków. Wszystkie kosztowne operacje We / Wy są zawsze wykonywane asynchronicznie z wywołaniem zwrotnym, które jest wykonywane po zakończeniu inicjowanej operacji.

Obserwacja, czy jakakolwiek operacja się wydarzy, jest obsługiwana przez mechanizmy multipleksowania, takie jak epoll().

Moje pytanie brzmi teraz:

  • Dlaczego NodeJS nie blokuje się podczas korzystania z blokowania Systemcalls wybierz / epoll / kqueue?

  • Lub isnt NodeJS pojedynczy gwint w ogóle, tak, że drugi gwint jest
    konieczne obserwowanie wszystkich operacji We/Wy z select/epoll / kqueue?

Author: Robert Harvey, 2011-08-11

3 answers

NodeJS jest evented (2nd line from the website), a nie jednowątkowy. Wewnętrznie obsługuje wątki potrzebne do obsługi select / epoll / kqueue bez wyraźnej konieczności zarządzania tym przez użytkownika, ale to nie znaczy, że nie ma w nim użycia wątku.

 107
Author: Femi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-10 21:39:15

Nie.

Podczas inicjowania operacji We/Wy są one delegowane do libuv, która zarządza żądaniem za pomocą własnego (wielowątkowego, asynchronicznego) środowiska. libuv ogłasza zakończenie operacji wejścia / Wyjścia, umożliwiając ponowne wprowadzenie wszystkich wywołań zwrotnych oczekujących na to zdarzenie do głównego wątku V8 w celu wykonania.

V8 - > Delegate I / o (libuv) - > Thread pool - > Multi threaded async

 8
Author: serkan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 16:55:38

JavaScript jest jednowątkowy, podobnie jak event-model. Ale stos węzłów nie jest jednowątkowy.

Node wykorzystuje silnik V8 do współbieżności.

 0
Author: Pujan Srivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 02:05:34