Это одно Node.JS приложение использует несколько ядер? - PullRequest
4 голосов
/ 11 января 2020

В системе Ubuntu 18.04, выполняющей только сценарий 1 Node.js, который принимает поток данных, htop показывает, что используются оба ядра ЦП.

При работающем сценарии с 1 узлом: enter image description here

С запущенным скриптом NO node.js: enter image description here

Этот Node.js скрипт имеет несколько прослушивателей событий, которые получают данные, выполняют некоторую обработку данных и отправляют их на удаленный сервер базы данных.

foo.on('msg', msg => { setImmediate(() => do_work(msg)) } );

Вопрос: Почему это выглядит так, как будто оба ядра ЦП используются скорее в равной степени по Node, несмотря на то, что Node.js является однопоточным? Наблюдаемые расщепления загрузки процессора составляют 60% / 40% и 50% / 50%

. На самом ли деле используются оба ядра процессора? Или просто переключаться между ними очень быстро все время, но при этом использовать только одно ядро ​​одновременно? Другими словами, такой сценарий приведет к тому, что система задохнется, когда рабочая нагрузка ЦП превысит 1 ядро, но меньше, чем 2 ядер.

В принципе, я хотел бы знать, будет ли достаточно одноядерной системы для этого нагрузка. Спасибо!

Ответы [ 2 ]

4 голосов
/ 11 января 2020

Даже если только одна JS функция (для среды) 1 будет выполняться в любой момент времени на одном ядре, это не означает, что

1: вы упоминаете, что запускаете только один сценарий, что означает, что существует только одна область JS объектов. Еще одна возможность для приложения node.js работать в нескольких потоках - порождать working , каждый из которых имеет свою собственную среду JS и обменивается данными через события.

2 голосов
/ 12 января 2020

Тот факт, что запущено несколько экземпляров узла (пока вы запускали скрипт один раз), означает, что это не является ни внутренним механизмом node, ни использованием рабочих потоков сценарием для использования ЦП.

Сценарий или одна из используемых им библиотек пытается использовать ЦП старым способом ( дочерний процесс ), что приводит к изолированным (без разделяемой памяти) экземплярам node (несколько процессы, как в вашем случае), которые взаимодействуют через IP C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...