- Я узнал, что node.js использует libeio внутренне для выполнения async файла ввода/вывода, с пулом потоков, на платформе * nix, правильно?
- Как насчет async сети ввода/вывода? Это сделано libev? Есть ли пул потоков?
- Если внутри есть пул потоков, как он может быть более эффективным, чем традиционная модель с одним потоком за запрос? И это один поток на запрос ввода-вывода?
- А какой механизм на окнах? Я знаю, что это сделано IOCP, и есть пул потоков уровня ядра, правильно?
- Почему у linux нет собственного полностью механизма AIO, такого как Windows IOCP? Будет ли это в будущем?
Обновление в соответствии с ответом changchang:
- Я быстро просмотрел исходный код @changchang, установил, что размер пула потоков по умолчанию может быть reset на UV_THREADPOOL_SIZE, мне интересно, в каком случае это будет использоваться?
- Я также нашел getaddrinfo использовать этот пул потоков, есть ли больше, кроме fs? И если все задания синхронизации будут выполняться в этом пуле потоков, достаточно ли размер по умолчанию "4"?
- Как я понимаю, в процессе node.js будет 6 основных потоков: 1 поток V8 (цикл событий, где выполняются javascript-коды пользователей), 1 цикл событий libuv и 4 в пуле потоков, я прав?
-
И как я могу увидеть эти потоки в своей оболочке (Ubuntu)? Я использую ps -eLf | grep node | grep -v grep видел только два:
root 16148 7492 16148 0 2 20:43 pts/26 00:00:00./bin/node/home/aaron/workspace/test.js
root 16148 7492 16149 0 2 20:43 pts/26 00:00:00./bin/ node/home/aaron/workspace/test.js