Задание Cron против NodeJS setInterval для оптимальной производительности
Я создаю простой скрипт nodejs, который обновляет запись DNS на основе моего текущего IP. Сценарий работает нормально, но у меня есть некоторые опасения относительно того, как мне его запустить. Проверка моего IP должна выполняться каждые 5 минут, и я сталкиваюсь с дилеммой.
Должен ли я использовать setInterval в Node или создать задание cron? Какой из них потребляет меньше всего оперативной памяти и процессора? Пожалуйста, имейте в виду, что скрипт работает на Raspberry Pi Zero с 512 МБ оперативной памяти и только 1 ядром.
Я знаю что cron
кажется лучшим вариантом, но насколько он лучше? Имеет ли это значение, учитывая мои характеристики?
2 ответа
Преимущества решения cron
- меньшее потребление памяти в 90% случаев
- утечки памяти эффективно устраняются
- код перезагружает все библиотеки каждый раз, поэтому обновления вступают в силу при следующем запуске без дополнительной сложности
Преимущества решения демона
- время загрузки происходит только один раз, поэтому дисковый ввод-вывод и загрузка процессора снижаются для последующих запусков, поскольку вы не будете разбирать исходный код или извлекать все библиотеки
- более низкий процессор и дисковый ввод-вывод для последующих запусков также означает, что этих ресурсов будет больше для любого основного приложения Raspberry.
- Linux должен поменять память, которую вы не используете. Это может быть очень медленно в зависимости от вашего хранилища.
Заключение
Я согласен с Александром Т, что cron
Вероятно, это будет лучше, но если ваше главное приложение чувствительно к фоновым процессам, возможно, лучше использовать демон.
Мое мнение, cron
лучше. Я думаю, что запускать скрипт каждые 5 минут лучше, чем запускать скрипт, который запускается каждые 5 минут. Например, если ваш сценарий умирает, что вы будете делать? С Cron это просто начать в следующий раз через 5 минут.
Так что для памяти и процессора. Я не знаю, как node.js тратит память прямо сейчас, но раньше была проблема с утечками памяти, и с процессом, работающим в течение долгого времени, могла быть проблема. Думаю, разницы в загрузке процессора нет.