, , , , . , FIFO , . ( ), , ..
, - , . , setImmediate() readFile(), , while .
, (), - ( fs.readFile), idle/prepare (none), poll (none), check (setImmediate callback) , , ( none) , , setImmediate() .
, - -, , , . I/O poll (. ). , -, -, readfile, , .
setImmediate() , readFile().
-, , , , readFile() , setImmediate().
, while :
- while , , , .
- -, , . -
readFile() . . - I/O.
readFile() - ( ). - checkHandlers,
setImmediate(). - . , - , ,
readFile().
, , , , . ( ):
const fs = require('fs')
let begin = 0;
function log(msg) {
if (!begin) {
begin = Date.now();
}
let t = ((Date.now() - begin) / 1000).toFixed(3);
console.log("" + t + ": " + msg);
}
log('start program');
setTimeout(() => log('timer'), 10);
setImmediate(() => log('immediate'));
fs.readFile(__filename, () => log('readfile'));
const now = Date.now();
log('start loop');
while(Date.now() - now < 1000) {}
log('done loop');
:
0.000: start program
0.004: start loop
1.004: done loop
1.005: timer
1.006: immediate
1.008: readfile
, , .
:
- 10 ,
fs.readFile() ,setImmediate() , ,whilewhile fs.readFile() ( ). , ( )while 1 , Javascript- "" . . . ( ). , - "" . , "" .
- ,
timer. - , . - -. -. ,
readFile() , ( ). - - - .
readFile() ( ) /. setImmediate(), . , immediate.- ( ).
- , . .
- -.
readFile(), readfile . - , , .
( ), . ( , - , setImmediate() ..). FIFO . - FIFO . ( , ) .
:

. , .
, readfile . , , readFile() , . , - ( ), setImmediate() - . readFile() setImmediate(), while.
, , , readFile() setImmediate(). , while , , , , , .
readFile() setImmediate() setTimeout(). , :
const fs = require('fs')
let begin = 0;
function log(msg) {
if (!begin) {
begin = Date.now();
}
let t = ((Date.now() - begin) / 1000).toFixed(3);
console.log("" + t + ": " + msg);
}
log('start program');
setImmediate(() => log('immediate'));
setTimeout(() => log('timer'), 10);
const now = Date.now();
log('start loop');
while(Date.now() - now < 1000) {}
log('done loop');
:
0.000: start program
0.003: start loop
1.003: done loop
1.005: timer
1.008: immediate
( , ).
setImmediate() .setTimeout() .- while 1000
- , . , , ,
timer. - , ,
setImmediate(), immediate.
-, :
// timeout_vs_immediate.js
const fs = require('fs');
fs.readFile(__filename, () => {
setTimeout(() => {
console.log('timeout');
}, 0);
setImmediate(() => {
console.log('immediate');
});
});
, setTimeout() setImmediate() , . setImmediate() , :
immediate
timeout
- , " -". setTimeout() setImmediate() -, " -" . , setImmediate() , .
setImmediate() setTimeout() , setImmediate(), . , , , .