2015-03-19 5 views
3

Известно, что node.js внутренне обрабатывает асинхронные вызовы, и программисту никогда не нужно заботиться о том, что происходит в кулуарах. Насколько я знаю, даже если все говорят, что node.js - это только один поток, внутренние библиотеки v8/libuv порождают потоки, чтобы обрабатывать выполнение асинхронных фрагментов программы.Обработка асинхронных вызовов Node.js и многоядерное масштабирование

Вопрос в том, являются ли эти потоки порожденными, масштабируют ли они многоядерные архитектуры? Я имею в виду, что если у меня есть процессор с 4 ядрами, а поток основного узла работает на одном из этих процессоров, будут ли эти внутренне порожденные потоки масштабироваться для остальных трех процессоров и не останутся на одном CPU. Теоретически они должны масштабироваться, но поскольку все говорят, что node.js из коробки не использует несколько ядер, я думал, что это стоит спросить.

ответ

2

Node.js имеет дело с одним потоком в процессе. Чтобы сделать его масштабированным до нескольких ядер, вам нужно запустить несколько серверов Node.js, по одному на каждый ядро ​​и трафик между ними.

+0

one-thread-per-process: Я не думаю, что эта фраза понятна правильно. Существует один процесс (процесс узла) и поток (поток основного узла), но во время процесса генерируется больше потоков для обработки асинхронных вызовов. Зачем кому-то нужна библиотека потоков, такая как v8 и libuv, если все обрабатывается только одним потоком? – ralzaul

+0

Node.js работает только с одним потоком выполнения, что на самом деле означает, что он выполняет все по одному потоку на основе циклов событий. Если вы хотите, чтобы node.js использовал несколько ядер одного процессора, переходите к кластерам. – Pragya

+0

Кроме того, v8 обеспечивает мощную многопоточную среду, поэтому не смешивайте ее с несколькими ядрами – Pragya