W serwerach opartych na PHP (lub Java / ASP.NET / Ruby) każde żądanie klienta jest tworzone w nowym wątku. Ale w Node.js wszyscy klienci działają w tym samym wątku (mogą nawet współużytkować te same zmienne!) Rozumiem, że operacje We / Wy są oparte na zdarzeniach, więc nie blokują głównej pętli wątku.
Nie rozumiem, DLACZEGO autor Node wybrał go jako jednowątkowy? To utrudnia. Na przykład nie mogę uruchomić funkcji intensywnie wykorzystującej procesor, ponieważ blokuje ona główny wątek (a nowe żądania klientów są blokowane), więc muszę zrestartować proces (co oznacza, że muszę utworzyć osobny plik JavaScript i wykonać inny proces węzła na to). Jednak w PHP procesory intensywne nie blokują innych klientów, ponieważ jak wspomniałem, każdy klient ma inny wątek. Jakie są jego zalety w porównaniu do wielowątkowych serwerów sieciowych?
Uwaga: korzystałem z klastrowania, aby obejść ten problem, ale to nie jest ładne.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!wyświetla pięć wątków w moim systemie. Główna pętla zdarzeń jest jednowątkowa (nie miałaby większego sensu, gdyby tak nie było), ale Węzeł jest mocno wielowątkowy i możesz pisać wielowątkowe aplikacje jednoprocesowe, jeśli chcesz. Chciałbym napisać wyczerpującą odpowiedź na ten temat, ale niektóre osoby postanowiły zamknąć twoje pytanie, więc nie mogę. Głosuję za ponownym otwarciem. Jeśli otrzyma więcej głosów i zostanie ponownie otwarty, to proszę wspomnieć o mnie w komentarzu.