• 关于event loop


    之前写了篇文章 JS运行机制,里面对event loop简单的说明,面试时又遇到了关于该知识点的题目(主要是process.nextTick和setImmediate的执行顺序不太知道,查了之后才知道是关于Node JS的event loop)看了阮一峰老师的博客,又有了更深入的理解:

    JS中的任务分同步任务和异步任务:

    所有同步任务都在主线程中执行,形成一个执行栈

    主线程之外还有一个任务队列,用于存放异步任务,执行栈中的同步任务执行完毕,系统就会读取任务队列中的异步任务,将其放到执行栈中;

    上述过程不断循环,此过程就是Event Loop

    NodeJS的Event Loop

    Node.js也是单线程的Event Loop,但是它的运行机制不同于浏览器环境.

    除了setTimeout和setInterval这两个方法,Node.js还提供了另外两个与"任务队列"有关的方法:process.nextTicksetImmediate

    process.nextTick方法可以在当前"执行栈"的尾部----下一次Event Loop(主线程读取"任务队列")之前----触发回调函数。

    setImmediate方法则是在当前"任务队列"的尾部添加事件。(摘自阮老师的博客)

    概括来说,执行顺序:process.nextTick > setTimeout(setInterval) > setImmediate

    process.nextTick(()=>{
        console.log('nextTick');
    })
    Promise.resolve().then(()=>{console.log('promise1')}).then(()=>{
        console.log('promise2');
    });
    setImmediate(()=>{console.log('setImmediate1')})
    console.log('end');
    
    执行结果:
    end
    nextTick
    promise1
    promise2
    setImmediate1
    
    //说明:先执行同步任务--输出end,process.nextTick会在执行栈尾部触发,所以接下来会输出nextTick
    //setImmediate会在任务队列的尾部,因此顺序是promise1 promise2 setImmediate1
    

      

    NodeJS event loop参考 https://blog.csdn.net/hkh_1012/article/details/53453138

    参考;阮一峰老师博客http://www.ruanyifeng.com/blog/2014/10/event-loop.html

  • 相关阅读:
    尝试制作了一个Panorama
    Python小游戏之猜数字
    Java基础-多线程学习目录
    Java8学习笔记目录
    Guava学习笔记目录
    Angular4学习笔记-目录汇总
    Springboot学习笔记
    JavaWeb-Tomcat阀
    JavaWeb-Tomcat安全域
    JavaWeb-Servlet基础
  • 原文地址:https://www.cnblogs.com/jingmi-coding/p/9317898.html
Copyright © 2020-2023  润新知