Zamieszanie wokół węzła.wewnętrzny asynchroniczny mechanizm We/Wy js
- nauczyłem się tego węzła.js używa libeio wewnętrznie do wykonywania asynchronicznego pliku I/ O, z pulą wątków, na platformie * nix, mam rację?
- A co z asyncnetwork I/O? Czy to robi libev? Czy istnieje też Pula wątków?
- Jeśli wewnątrz znajduje się Pula wątków, jak może być bardziej wydajna niż tradycyjny model z jednym wątkiem na żądanie? I czy jest to jeden wątek na żądanie wejścia / Wyjścia?
- A jaki jest mechanizm w Windowsie? Wiem, że robi to IOCP i jest Pula wątków na poziomie jądra, prawda?
- Dlaczego linux nie ma jeszcze natywnego mechanizmu AIO takiego jak windows IOCP? Czy będzie w przyszłości?
Aktualizacja zgodnie z odpowiedzią changchanga:
- rzuciłem okiem na kod źródłowy @ changchang podałem, okazało się, że domyślny rozmiar puli wątków może być zresetowany przez UV_THREADPOOL_SIZE , zastanawiam się, w którym przypadku będzie to używane?
- I found getaddrinfo use this thread pool, is jest jeszcze coś poza fs? A jeśli wszystkie zadania synchronizacji zostaną wykonane w tej puli wątków, czy domyślny rozmiar " 4 " wystarczy?
- Jak teraz rozumiem, będzie 6 podstawowych wątków w node.proces js: 1 Wątek V8 (pętla zdarzeń, gdzie uruchamiane są kody javascript użytkownika), 1 pętla zdarzeń libuv i 4 w puli wątków, mam rację?
-
A Jak mogę zobaczyć te wątki w mojej powłoce (Ubuntu)? Używam PS-Elf / grep node | grep-v grep tylko dwa:
Root 16148 7492 16148 0 2 20: 43 pkt / 26 00: 00: 00 ./ bin / node / home/aaron/workspace / test.js
root 16148 7492 16149 0 2 20:43 pkt/26 00:00:00 ./ bin / node / home/aaron/workspace / test.js
2 answers
Po pierwsze,
libuv
usunąłlibeio
z niego. Ale wykonuje asynchroniczne wejścia/wyjścia plików z pulą wątków jaklibeio
, tak jak wspomniałeś.libuv
usuwa równieżlibev
. Wykonuje asynchroniczne wejścia/Wyjścia sieciowe w oparciu o interfejsy async We / Wy na różnych platformach, takich jakepoll
,kqueue
iIOCP
, bez puli wątków. Istnieje pętla zdarzeń, która działa w głównym wątkuuv
, która bada zdarzenia We / Wy i przetwarza je.Wątek pool inside
libuv
to Pula wątków o stałym rozmiarze (4 w systemie podobnym do uinx ). Wykonuje rolę kolejki zadań i unika wyczerpania zasobów systemowych, generując wątki w nieskończoność, gdy żądania zwiększają się.
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-09-08 10:34:57
Uptil Wersja 0.6 węzeł używany libev
do uruchamiania pętli zdarzeń i libeio
dla asynchronicznych We/Wy, (backend Unix siedzi mocno na tych dwóch bibliotekach). Jednak libuv
zaczęła zastępować libev
i libeio
w wersji 0.8 . Wykonuje, utrzymuje i zarządza wszystkimi io i wydarzeniami w Puli wydarzeń. libuv
jest wyborem w wieloplatformowych, asynchronicznych bibliotekach IO.
-
Tak, upto node 0.6, deprecated in 0.8 i używa puli wątków
-
Tak, ale
libev
nie używa Pula wątków. Zobacz tutajWyjaśnienie : zgodnie z linkiem w zadanym przeze mnie pytaniu ,
libeio
Obsługuje wszystkie funkcje POSIX obsługujące wejścia/wyjścia (w tym socket). Ale node author zdecydował się użyć go tylko do asynchronicznych We/Wy plików i używalibev
do sieciowych We/Wy.Nie wiem skąd to słyszałeś, ale możesz używać epoll na zwykłych plikach. libev
używa pętli zdarzeń, więc nie ma tu żadnych problemów.- tak IOCP uchwyty asynchroniczne We/Wy w windows, kernel używa puli wątków.
- nowe jądro Linuksa ma epoll, kqueue w nowym jądrze BSD.
libev
ilibeio
były dla środowiska Linuksa i zapewniają pętlę zdarzeń / asynchroniczne IO dla wszystkich jąder (obsługuje select, poll, epoll, kqueue).
Pytania aktualizacji:
- dont know much about
libuv
- maybe enough (dont know)
Oto moje ustalenia dotyczące systemu Windows 8, sprawdzone przez Process Explorer. Wyświetlono 4 wątki, 1 DLL, 1 plik i 1 Sekcja (łącznie 7 wpisów) dla procesu aplikacji węzła.
ps -eLf
pokazuje wszystkie wątki i procesy, być może przefiltrowujesz je, po prostu poszukaj PID procesu węzła, takiego jakps -eLf | grep x
, gdzie x jest pid dla procesu węzła.
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-05-23 10:30:46