NodeJS事件循环面试题

  • 在NodeJS中指定的延迟时间是有一定的误差的,所以导致了输出结果随机的问题

    setTimeout(function () {
        console.log("setTimeout");
    }, 0);
    setImmediate(function () {
        console.log("setImmediate");
    });
  • 而在poll队列中输出结果是固定的:

    • 会先将readFile放在poll队列。同步代码执行完毕——切换到timers,timers为空——切换到poll,poll中任务未满足条件——检查到check为空,则不切换到check,而切换到timers,timers仍然为空——poll发生阻塞。当poll中任务满足条件,执行readFile的回调——将setTimeout放在timers中,setImmediate放在check中,当readFile执行完毕,则检查check,执行check中任务——执行timers中任务
    const path = require("path");
    const fs = require("fs");
    
    fs.readFile(path.join(__dirname, "04.js"), function () {
        setTimeout(function () {
            console.log("setTimeout");
        }, 0);
        setImmediate(function () {
            console.log("setImmediate");
        });
    }); // setImmediate setTimeout

最后修改:2021 年 03 月 21 日 11 : 19 PM
如果觉得我的文章对你有用,请随意赞赏!