Почему Event Loop пропускает очередь poll и сразу выполняет check?
Почему Event Loop пропускает очередь poll и сразу выполняет check? Это же не логично все очереди он выполняет по порядку, а потом бац и перескакивает. Вот зачем и для чего не понятно.
Например вот в таком коде он сначала пойдет и выполнит setImmidiate вместо readFile
console.log('START');
setTimeout(() => console.log('setTimeout'), 0); //Попал в очередь timers 1)timers set intervals
setImmediate(() => console.log('setImmediate')); //Попал в очередь check 7
fs.readFile( 'eventloop.txt', () => { //попал в очередь poll
setTimeout(() => console.log('readfile setTimeout'), 0);
setImmediate(() => console.log('readFile setImmidiate'));
process.nextTick(() => console.log('read file Next Tick'));
}
)
Promise.resolve() // Попал в очередь other microtask que
.then(() => {
console.log('Promise')
process.nextTick(() => console.log('Promise Next Tick'));
})
process.nextTick(() => console.log('nextTick'));
setTimeout(() => console.log('setTimeout 2'), 0); //Попал в очередь timers 1)timers set intervals все node.js пропарсилась;
console.log('end')
| Как есть | Как ожидалось | |
|---|---|---|
| START | START | |
| end | end | |
| nextTick | nextTick | |
| Promise | Promise | |
| Promise Next Tick | Promise Next Tick | |
| setTimeout | setTimeout | |
| setTimeout 2 | setTimeout 2 | |
| → | setImmediate | read file Next Tick |
| → | read file Next Tick | readFile setImmidiate |
| → | readFile setImmidiate | readfile setTimeout |
| → | readfile setTimeout | setImmediate |
Ответы (1 шт):
Если я правильно понимаю, обращение к файловой системе Node.js делегирует системным вызовам, то есть эта фаза не полностью под контролем Node.js, в отличие от всех остальных в вашем скрипте. Поэтому, до тех пор, пока придёт ответ от файловой системы, event loop может пройти виток или больше.
If the poll queue is empty, one of two more things will happen:
- If scripts have been scheduled by setImmediate(), the event loop will end the poll phase and continue to the check phase to execute those scheduled scripts.
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#poll