Выбор ответа Middle Event loop и libuv обновлено

Размер пула потоков libuv

Вопрос

Сервер одновременно запускает 8 вызовов crypto.pbkdf2 с колбэком, каждый идёт около 1 с. Настройки по умолчанию. Как они завершатся?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Двумя волнами по 4: около 1 с и около 2 с. Размер пула libuv по умолчанию 4 потока, независимо от числа ядер.

Варианты ответа

  1. Все 8 примерно за 1 с: пул растёт по числу ядер
  2. Двумя волнами по 4: около 1 с и около 2 справильный ответ
  3. По очереди, всего около 8 с: JS однопоточный
  4. Все 8 за 1 с, но главный поток заблокирован

Разбор

Размер пула libuv по умолчанию 4 потока, независимо от числа ядер. Первые 4 задачи займут пул, остальные 4 подождут. Увеличить можно переменной UV_THREADPOOL_SIZE до старта процесса.

  • Пул сам по числу ядер не растёт.
  • Последовательно они бы шли с pbkdf2Sync, а асинхронная версия выполняется вне главного потока.
  • Главный поток не блокируется, работа идёт в пуле.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме