Я создал приложение nodejs, которое должно выполнять несколько задач.
В моем app.js есть вызов функции модуля менеджера, который управляет этими задачами.
Я хочу вызывать эту функцию из моего app.js и выполнять эти задачи каждые 30 секунд.
что-то типа:
setInterval(manager.tasks(), 30000);
Мой вопрос в том, что если использование setInterval может вызвать проблемы с производительностью (замедление работы компьютера, блокировка ресурсов или любая другая причина)
Есть ли более эффективный способ сделать это или setInterval в порядке?
Вы также можете запустить «задание», которое запускается внутри setInterval извне, например. кронтаб.
Я не могу сказать, насколько он тяжелый. Менеджер выполняет несколько http-запросов и некоторые другие мелочи, такие как массивы фильтров и т. д. Я подумал об использовании модуля событий nodejs. Когда я заканчиваю выполнение всех задач, я излучаю сигнал и жду 30 секунд, прежде чем снова вызвать менеджеру. Будет ли это лучшим решением?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо этого используйте узел-cron или узел-расписание.
setInterval реализован в стандартном node js, у вас не будет проблем с производительностью/блокировкой, большинство библиотек также используют setInterval
это зависит от того, насколько тяжелая работа/обработка, которую вы хотите выполнить, setInterval является асинхронной, поэтому ваш код будет запускаться только один раз каждые 30 секунд, но в то же время JavaScript является однопоточным, поэтому, если вы делаете много работать в вашей задаче, один раз, когда он запускается за 30 секунд, это может занять слишком много времени, что приведет к блокировке ресурсов.
В большинстве случаев вы должны использовать setInterval, но если вы действительно хотите эмулировать многопоточность или если вы выполняете слишком много работы в своей задаче, вы можете создать еще один дочерний процесс https://nodejs.org/api/child_process.html или использовать новый API рабочих потоков. Вместо этого используйте https://nodejs.org/api/worker_threads.html, но имейте в виду, что его не так просто реализовать, как вызов setInterval.
Это полностью зависит от функции, которую вы выполняете внутри setInterval. Если это операция, связанная с вводом-выводом, вам не нужно слишком беспокоиться, потому что libuv будет обрабатывать себя. это.
О, насколько тяжела твоя функция? Потому что
setIntervalсам по себе должен иметь незначительные накладные расходы — он просто ставит вещи в очередь на потом. Если для выполнения задачи, которую он выполняет, требуется 10 секунд, это может быть другое дело, но на самом деле это не так уж сильно зависит отsetInterval.