связь между логическими ядрами компьютера и пулом потоков nodejs - PullRequest
0 голосов
/ 28 декабря 2018

Я прочитал много статей о stackoverflow, но не смог найти каких-либо ссылок о взаимосвязи между логическими ядрами компьютера и пулом потоков nodejs.Я считаю, что это не дублированный вопрос.

Я использую MacBook Pro 2017 года, который имеет 2-физическое ядро ​​с 4 нитями (4 логических ядра)

, и я считаю, что nodejs использует размер пула потоков 4 (ссылкас libuv) при выполнении тяжелых задач, таких как pbkdf2 (функция внутри криптомодуля), операции ввода-вывода.

Мой вопрос заключается в том, какова взаимосвязь между размером потока компьютера и размером пула потоков nodejs?

на самом деле я никогда не думал о потоке компьютера.

это может показаться странным, но до сих пор я считал, что у компьютера есть только физическое ядро, и если приложение, такое как экземпляр nodejs, поддерживает пул потоков (в данном случае пул потоков)размер 4 по умолчанию), тогда компьютер может использовать многопоточность.

так, каковы именно отношения между этими двумя?

мне нужно изменить THREADPOOL_SIZE на число логического ядра компьютера, чтобымаксимизировать производительность ..?

1 Ответ

0 голосов
/ 28 декабря 2018

node.js не динамически регулирует размер пула потоков в зависимости от имеющихся или логических процессоров.Он имеет предварительно установленное значение (4), если вы не настроите его.

Поскольку пул потоков часто используется для операций блокировки, таких как дисковый ввод-вывод, не всегда верно, что оптимальным значением для размера пула потоков являетсяколичество логических процессоров, которые у вас есть (в отличие от типичной рекомендации по кластеризации).

Вместо этого, скорее всего, это будет зависеть от того, какие конкретные типы операций вы больше всего хотите оптимизировать, и как именно вы используете эти операции.Например, это, вероятно, не очень помогает вам выполнять все больше и больше операций с параллельным диском, когда все пытаются получить доступ к одному и тому же физическому диску, потому что есть только одна позиция, которую головка чтения / записи может перемещать за раз, поэтому, имея многопараллельные операции, все из которых конкурируют за одну и ту же головку чтения / записи, могут не ускорить процесс (могут даже замедлить процесс).

Если у вас есть конкретная операция, для которой вы пытаетесь оптимизировать, то лучше всего сделать следующее:создайте воспроизводимый тест производительности, а затем измерьте его несколькими размерами для пула потоков.

Как было отмечено в комментарии, вы можете изучить некоторые соответствующие коды пула потоков здесь .

...