Узел: одно ядро, много процессов
Я посмотрел в Интернете, и все, что мне кажется, - это ответы, связанные с вопросом "как Node выигрывает от работы в многоядерном процессоре?"
Но. Если у вас есть машина с одним ядром, вы можете одновременно запускать только один процесс. (Я рассматриваю планирование задач здесь). И узел использует однопоточную модель.
Мой вопрос: есть ли сценарий, в котором имеет смысл запускать процессы нескольких узлов в одном ядре? И если процесс представляет собой веб-сервер, который прослушивает порт, как это может работать, если только один процесс может прослушивать?
1 ответ
Мой вопрос: есть ли сценарий, в котором имеет смысл запускать процессы нескольких узлов в одном ядре?
Да, есть несколько сценариев. Подробности смотрите ниже.
И если процесс представляет собой веб-сервер, который прослушивает порт, как это может работать, если только один процесс может прослушивать?
Модуль кластеризации node.js создает сценарий, в котором есть один прослушиватель на желаемом порту, но входящие запросы распределяются между всеми кластеризованными процессами. Подробнее, чтобы следовать...
Модуль кластеризации можно использовать для запуска более одного процесса, все из которых настроены на обработку входящих запросов на одном и том же порту. Если вы хотите узнать, как поступающие запросы распределяются между различными кластерными процессами, вы можете прочитать объяснение в этом блоге. Короче говоря, на желаемом порте остается только один прослушиватель, и входящие запросы распределяются между различными кластерными процессами.
Относительно того, можете ли вы извлечь выгоду из большего количества процессов, чем у вас есть ядер, ответ заключается в том, что это зависит от того, какую выгоду вы ищете. Если у вас есть правильно написанный сервер со всеми асинхронными операциями ввода-вывода, то добавление большего количества процессов, чем ядер, скорее всего, не улучшит вашу общую пропускную способность (измеряемую по количеству запросов в секунду, которые ваш сервер может обработать).
Но, если в ваших запросах есть какая-то обработка с высокой загрузкой ЦП, наличие еще нескольких процессов может обеспечить более справедливое планирование между одновременными запросами, поскольку ОС будет "делить" ЦП между каждым из ваших процессов. Это, вероятно, немного снизит общую пропускную способность (из-за дополнительных накладных расходов, связанных с переключением ЦП между процессами), но может повысить эффективность обработки запросов, даже если имеется несколько запросов, которые должны обрабатываться вместе.
Если ваши запросы не сильно загружены процессором и в большинстве случаев просто ожидают ввода-вывода, то, вероятно, нет смысла добавлять больше процессов, чем ядра.
Таким образом, это действительно зависит от того, что вы хотите оптимизировать и какова ваша ситуация.