Zamieszanie wokół węzła.wewnętrzny asynchroniczny mechanizm We/Wy js

  1. 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ę?
  2. A co z asyncnetwork I/O? Czy to robi libev? Czy istnieje też Pula wątków?
  3. 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?
  4. A jaki jest mechanizm w Windowsie? Wiem, że robi to IOCP i jest Pula wątków na poziomie jądra, prawda?
  5. Dlaczego linux nie ma jeszcze natywnego mechanizmu AIO takiego jak windows IOCP? Czy będzie w przyszłości?

Aktualizacja zgodnie z odpowiedzią changchanga:

  1. 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?
  2. 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?
  3. 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ę?
  4. 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

Author: Aaron Wang, 2013-03-20

2 answers

  1. Po pierwsze, libuv usunął libeio z niego. Ale wykonuje asynchroniczne wejścia/wyjścia plików z pulą wątków jak libeio, tak jak wspomniałeś.

  2. libuv usuwa również libev. Wykonuje asynchroniczne wejścia/Wyjścia sieciowe w oparciu o interfejsy async We / Wy na różnych platformach, takich jak epoll, kqueue i IOCP, bez puli wątków. Istnieje pętla zdarzeń, która działa w głównym wątku uv, która bada zdarzenia We / Wy i przetwarza je.

  3. 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ę.

 26
Author: changchang,
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
  1. Tak, ale libev nie używa Pula wątków. Zobacz tutaj

    Wyjaś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żywa libev do sieciowych We/Wy.Nie wiem skąd to słyszałeś, ale możesz używać epoll na zwykłych plikach.

  2. libev używa pętli zdarzeń, więc nie ma tu żadnych problemów.

  3. tak IOCP uchwyty asynchroniczne We/Wy w windows, kernel używa puli wątków.
  4. nowe jądro Linuksa ma epoll, kqueue w nowym jądrze BSD. libev i libeio były dla środowiska Linuksa i zapewniają pętlę zdarzeń / asynchroniczne IO dla wszystkich jąder (obsługuje select, poll, epoll, kqueue).

Pytania aktualizacji:

  1. dont know much about libuv
  2. maybe enough (dont know)
  3. 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.

  4. ps -eLf pokazuje wszystkie wątki i procesy, być może przefiltrowujesz je, po prostu poszukaj PID procesu węzła, takiego jak ps -eLf | grep x, gdzie x jest pid dla procesu węzła.

 2
Author: user568109,
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