Код: Выделить всё
const fs = require('node:fs/promises');
// Schedule a timeout
setTimeout(() => {
console.log("set timeout callback is called!");
}, 10);
function consumeCpu(limit) {
console.log(`waiting a while (limit is ${limit})`);
let sum = 1;
for (let i = 0; i < limit; i++) {
sum += i;
}
}
let cycles = Number(process.argv[2]);
// Wait a while (blocking CPU)
consumeCpu(cycles);
// Run an async I/O action which will fail
(async () => {
try {
// This file does not exist, so an error will be thrown
let data = await fs.readFile('/tmp/123.txt');
} catch (err) {
console.log("err is: " + err);
}
})();
// Wait a while again (blocking CPU)
consumeCpu(cycles);
console.log("end of script");
// Let event loop start processing
1. С небольшой задержкой блокировки:
Код: Выделить всё
node test.js 100Выход:
Код: Выделить всё
waiting a while (limit is 100)
waiting a while (limit is 100)
end of script
err is: Error: ENOENT: no such file or directory, open '/tmp/123.txt'
set timeout callback is called!
2. С большой задержкой блокировки
Код: Выделить всё
node test.js 1000000000Выход:
Код: Выделить всё
waiting a while (limit is 1000000000)
waiting a while (limit is 1000000000)
end of script
set timeout callback is called!
err is: Error: ENOENT: no such file or directory, open '/tmp/123.txt'
node.js версия
Я использую node.js v22.12.0. /> Вопрос < /strong> < /p>
Почему node.js ведут себя по -разному в зависимости от того, как долго основной код блокирует цикл события? Почему блокировка цикла событий с помощью вызова функции ConsumeCpu имеет значение?
Подробнее здесь: https://stackoverflow.com/questions/796 ... cking-code
Мобильная версия