У меня есть сценарий узла, который должен использовать все ресурсы ЦП, которые может получить один узел. Но я нашел setInterval слишком медленным.
И, конечно же, я нашел это в документации:
Когда задержка больше, чем 2147483647 или меньше 1, задержка будет установлена равной 1.
источник: https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
Теперь я задаюсь вопросом, есть ли способ уменьшить предел дальше или если есть альтернативная функция, которую я мог бы использовать.
Я не могу просто использовать обычный цикл, потому что есть другие асинхронные вещи, которые нужно запускать в одно и то же время.
Редактировать:
Опять же: я не могу просто использовать обычный цикл, потому что есть другие асинхронные вещи, которые нужно запускать в одно и то же время. Я не знаю, почему это так трудно понять.
Пока работает обычный цикл, вы блокируете выполнение всего остального. Не имеет значения, если вы поместите цикл в другую асинхронно выполненную функцию.
Что это значит?
Рассмотрим несколько примеров:
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
while (true) {
// do whatever
}
Что будет делать этот код? Это заблокирует все. console.log('a')
не будет выполняться непрерывно.
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
setTimeout(()=>{
while (true) {
// do whatever
}
}, 1)
Это также заблокирует выполнение интервалов, как только начнется цикл while.