2016-08-10 2 views
2

Я искал онлайн, и все, что я, кажется, нахожу, это ответы, связанные с вопросом о том, как Node выигрывает от работы в многоядерном процессоре?Узел: одно ядро, много процессов

Но. Если у вас есть машина с одним ядром, вы можете запускать только один процесс в любой момент времени. (Я рассматриваю планирование задач здесь). И узел использует однопоточную модель.

Мой вопрос: существует ли какой-либо сценарий, в котором имеет смысл запускать несколько процессов узла в одном ядре? И если процесс - это веб-сервер, который слушает порт, как это может случиться, если только один процесс может прослушиваться?

ответ

4

Мой вопрос: существует ли какой-либо сценарий, в котором имеет смысл запускать процессы нескольких узлов в одном ядре?

Да, есть несколько сценариев. См. Подробности ниже.

И если этот процесс является веб-сервером, который прослушивает порт, как это может работать , это может случиться, что только один процесс может прослушивать?

Модуль кластеризации node.js создает сценарий, в котором есть один прослушиватель на нужном порту, но входящие запросы являются общими для всех кластерных процессов. Подробнее ...

Вы можете использовать модуль кластеризации для запуска нескольких процессов, которые настроены на обработку входящих запросов на одном и том же порту. Если вы хотите знать, как входящие запросы распределяются между различными кластерными процессами, вы можете прочитать объяснение в this blog post. В двух словах, в итоге получается только один прослушиватель на нужном порту, и входящие запросы распределяются между различными кластерными процессами.

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

Но, если у вас есть обработка процессора в ваших запросах, наличие нескольких процессов может обеспечить более справедливое планирование между одновременными запросами, потому что ОС «разделяет» процессор между каждым из ваших процессов. Это, скорее всего, немного снизит общую пропускную способность (из-за дополнительных накладных расходов на задачу переключения процессора между процессами), но это может сделать обработку запросов еще больше, даже если несколько запросов обрабатываются вместе.

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

Итак, это действительно зависит от того, что вы хотите оптимизировать и какова ваша ситуация.