Выбор ответа Middle Event loop и libuv обновлено
Размер пула потоков libuv
Вопрос
Сервер одновременно запускает 8 вызовов crypto.pbkdf2 с колбэком, каждый идёт около 1 с. Настройки по умолчанию. Как они завершатся?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Двумя волнами по 4: около 1 с и около 2 с. Размер пула libuv по умолчанию 4 потока, независимо от числа ядер.
Варианты ответа
- Все 8 примерно за 1 с: пул растёт по числу ядер
- Двумя волнами по 4: около 1 с и около 2 справильный ответ
- По очереди, всего около 8 с: JS однопоточный
- Все 8 за 1 с, но главный поток заблокирован
Разбор
Размер пула libuv по умолчанию 4 потока, независимо от числа ядер. Первые 4 задачи займут пул, остальные 4 подождут. Увеличить можно переменной UV_THREADPOOL_SIZE до старта процесса.
- Пул сам по числу ядер не растёт.
- Последовательно они бы шли с
pbkdf2Sync, а асинхронная версия выполняется вне главного потока. - Главный поток не блокируется, работа идёт в пуле.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Event loop и libuv»
- Тяжёлый цикл без блокировки event loop
- Код-ревью: что блокирует event loop
- Что блокирует event loop
- Объясни event loop в Node.js
- setImmediate и setTimeout внутри I/O
- setTimeout(0) против setImmediate на верхнем уровне
- Что такое libuv
- Рекурсивный process.nextTick