Почему сон в nodejs не работает, как ожидалось
Я использую эту библиотеку, чтобы спать внутри цикла, мой цикл выглядит так
while(condition){
usleep(1)
while(condition){
usleep(1)
// ... do stuff (sync)
}
}
Несмотря на то, что я сплю только 1us, цикл никогда не прерывается, просто очень-очень долго, но когда я удаляю оператор сна, он просто запускается и выполняется.
Я пытаюсь спать, чтобы процессор успокоился и не использовал 100%, поэтому сервер продолжает принимать другие запросы!
Использование setTimeout внутри цикла не очень хорошая идея, потому что setTimeout является асинхронным.
Я думал, используя рекурсию, но я боюсь, что это будет слишком медленно, я повторяю около 100000
2 ответа
Сон блокирует текущий поток, поэтому это не поможет вам попытаться принять другие запросы. Вы можете попробовать что-то вроде асинхронного сна, чтобы сделать работу.
Если вам действительно нужно сохранить этот код таким, какой он есть сейчас, используйте Promises и async / await. Таким образом, ваше приложение не будет заблокировано для других запросов.
Что-то вроде этого для начала:
async function sleep(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms);
});
}
async function run() {
while(condition){
await sleep(1000);
// ... do stuff
}
}
run().catch(err => console.error(err));