Node.js - нацеливание на ядро ​​процессора

Как начать процесс node, нацелив конкретное ядро ​​процессора?

Я видел кластер node, но мне интересно начать два разных процесса на разных ядрах.

Я предполагал, что существует способ сделать это при запуске node из командной строки, т.е.

node myapp.js

Мне было бы интересно узнать, как это сделать как в Windows, так и в Linux, если есть разница.

Ответ 1

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

Мы развертывали службу node на 8-ядерном ящике, и во время нагрузочного тестирования мы сделали самое странное наблюдение... служба действительно улучшилась с 7 работниками, чем с 8. Немного отладки позже, и мы выяснили что все сетевые прерывания обрабатывались ядром 0. Я играл с использованием 15 рабочих, так что core0 имел бы половину доли нагрузки по сравнению с другими ядрами. В конечном счете, я думаю, что мы закончили работу с 7 рабочими, потому что это было проще и предсказуемо, и сложность просто не стоила того, чтобы получить ~ 7% больше теоретической пропускной способности.

Говоря, чтобы установить близость процессора к Linux:

$ taskset -pc 3089
pid 3089 current affinity list: 0,1

$ taskset -p 3089
pid 3089 current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2


$ taskset -pc 1,2,3 3089 
pid 3089 current affinity list: 0,1
pid 3089 new affinity list: 1

Ответ 2

В linux вы можете использовать taskset для запуска node с заданным соотношением CPU. См. этот пост для получения информации об использовании команды start в Windows, чтобы сделать то же самое.