2013-06-07 13 views
25

Serwery Node.js są bardzo wydajne w zakresie operacji we/wy i dużej liczby połączeń klienckich. Ale dlaczego plik node.js nie jest odpowiedni dla ciężkich aplikacji procesorów w porównaniu do tradycyjnego serwera wielowątkowego?Dlaczego plik node.js nie jest odpowiedni dla ciężkich aplikacji procesora?

czytałem tutaj Felix Baumgarten

+4

Bez względu na swoją prawdę; gdzie podniosłeś to roszczenie? Jak myślisz, dlaczego tak się dzieje? – poke

+1

Jeśli * wiesz *, że tak nie jest, to powinieneś * wiedzieć * dlaczego tak nie jest. W przeciwnym razie po prostu papugujesz opinię kogoś innego. – meagar

+0

Przeczytałem ją tutaj [Felix Baumgarten] (http://nodeguide.com/convincing_the_boss.html) – vuvu

Odpowiedz

45

Węzeł jest, pomimo asynchronicznego modelu zdarzeń natury pojedynczego gwintowane. Po uruchomieniu procesu węzła uruchamiany jest pojedynczy proces z pojedynczym wątkiem na jednym rdzeniu. Tak więc twój kod nie będzie wykonywany równolegle, tylko operacje we/wy są równoległe, ponieważ są wykonywane asynchronicznie. Jako takie, długo działające zadania procesora będą blokować cały serwer i zwykle są złym pomysłem.

Biorąc pod uwagę, że wystarczy rozpocząć proces węzła w ten sposób, możliwe jest równoległe działanie wielu procesów węzłów. W ten sposób możesz nadal korzystać z wielowątkowej architektury, chociaż pojedynczy proces Node nie działa. Po prostu musisz mieć system równoważenia obciążenia z przodu, który rozsyła żądania we wszystkich procesach twojego węzła.

Inną opcją byłoby, aby procesor działał w oddzielnych procesach i aby węzeł działał z nimi w interakcji, zamiast wykonywać samą pracę.

Powiązane rzeczy czytać:

+1

co z wątkami roboczymi wykonującymi wywołania zwrotne, należą one do wątku zgodnie z tym artykułem: http: // www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-Developers.aspx – vuvu

+4

Twój kod nie będzie działał na tych wątkach roboczych.Są używane tylko wtedy, gdy uruchamiasz coś asynchronicznie (elementy I/O), ale zaraz po wywołaniu wywołania zwrotnego powracasz do pętli zdarzeń. Więc cały napisany kod będzie w jednym wątku. – poke

+0

Thank You @ poke !!! – vuvu

10

Prosty serwer node.js jest jednowątkowy, co oznacza, że ​​każda operacja, która zajmuje dużo czasu, aby wykonać zablokuje Reszta twojego programu nie działa. Aplikacje Node.js udaje się utrzymać wysoki poziom współbieżności, działając jako seria zdarzeń. Gdy funkcja obsługi zdarzeń czeka na coś, co się wydarzy (np. Odczyt z bazy danych), informuje węzeł, aby w międzyczasie wykonał kolejne zdarzenie. Ale ponieważ pojedynczy wątek może wykonywać tylko jedną instrukcję naraz, to podejście nie może uchronić cię od funkcji, która musi być aktywnie wykonywana przez długi czas. W architekturze wielowątkowej, nawet jeśli jedna funkcja zajmuje długi czas, aby obliczyć wynik, inne wątki mogą nadal przetwarzać inne żądania - i dopóki masz rdzeń, który nie jest w pełni używany w tym czasie, istnieje duża szansa, że ​​mogą to zrobić to tak szybko, jak gdyby żadne inne żądania nie działały wcale.

Aby sobie z tym poradzić, produkcyjne aplikacje Node.js, które spodziewają się wciągnąć dużo procesora, zwykle działają w klastrach. Oznacza to, że zamiast kilku wątków w jednym z obszarów pamięci programu, uruchamiasz kilka instancji tego samego programu pod kontrolą jednej instancji "master". Każdy proces jest jednowątkowy, ale ponieważ masz kilka z nich, zyskujesz korzyści z wielu wątków.

+0

Przeczytałem ten artykuł, gdzie jest powiedziane, że pętla zdarzeń jest pojedyncza, ale nie dotyczy obliczeń związanych z wydarzeniami, patrz tam jest wątek w dawaniu http://www.aaronstannard.com/post/2011/12/14/ Intro-to-NodeJS-for-NET-Developers.aspx – vuvu

+0

@vuvu: Ten artykuł jest trochę zagmatwany. Wyjaśnia to niepoprawnie jako pierwszy (sugerując, że każda procedura obsługi zdarzenia otrzymuje swój własny wątek), ale później wyjaśnia ją poprawnie (wiele funkcji narzędziowych, których używasz w procedurach obsługi zdarzeń działających w wątku w tle, więc nie blokuj, gdy jesteś, powiedzmy , czytając plik). [Ten artykuł] (http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/) wyjaśnia to jaśniej. – Chuck

Powiązane problemy