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

#javascript #node.js #cpu #throttling #sox

#javascript #node.js #процессор #регулирование #sox

Вопрос:

Не уверен, как спросить об этом. Я написал скрипт nodejs, который я запускаю на своем компьютере, и он вызывает некоторые процессы с интенсивным использованием ЦП (sox amp; ffmpeg) и многие из них. До определенного момента все в порядке, но как только он становится слишком тяжелым, все начинает ломаться.

Мне интересно, как я мог бы улучшить что-то подобное? Я новичок, но я попробовал несколько вещей. Я пробовал использовать setTimeouts , но я не уверен, действительно ли это помогло или это просто добавило больше работы поверх моего скрипта. Я также пытался поискать в Google информацию об отмене / регулировании в nodejs, но я нахожу только то, что связано с запросами API.

Комментарии:

1. Знаете ли вы причину замедления? Попробуйте в системе Unix top . Это может быть чрезмерное переключение процессов, но это станет проблемой, только если у вас намного больше процессов, чем ядер процессора (сотни или тысячи процессов). Это может быть вызвано высокой загрузкой в top . Это также может быть нехватка памяти, вызывающая замену. Вы можете определить это в top как высокий wa процент ( wa = ожидание ввода-вывода, что чаще всего указывает на замену).

2. большое спасибо. Я запускаю сотни процессов (которые фактически являются командами терминала sox / ffmpeg) в цикле for, так что, возможно, это все. где мне нужно было бы ввести top или что именно это такое? Извините, не уверен, что искать 🙂

3. top это программа командной строки в системах Unix (доступна в любом Linux, возможно, также в macOS), которая показывает запущенные процессы вместе с их использованием процессора и памяти. Вы запускаете его с терминала, набрав top и нажав Enter. Вы можете выполнить сортировку по использованию памяти с помощью Shift M и выйти из нее с помощью q ключа.

Ответ №1:

Одновременный запуск сотен процессов с интенсивным использованием процессора (таких как sox и ffmpeg) бессмыслен, если у вас нет сотен ядер процессора. Чтобы предоставить каждому процессу справедливую долю ЦП, это приводит к чрезмерному переключению процессов, что сопряжено со своими накладными расходами.

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