• 事件循环


    事件循环

    事件循环即js运行机制

    js是单线程,先同步后异步,先微观再宏观

    1. 所有同步任务都在主线程进行,形成一个执行栈,
    2. 主线程之外还有一个“任务队列”,异步任务有了结果会在任务队列中防止一个事件
    3. 一旦执行栈中的所有同步任务完成之后,系统默认会读取任务队列中的的事件,结束等待状态
    4. 主线程不断重复第三步

    主任务队列和等待任务队列

    浏览器是多线程的,js是单线程的

    js实现异步处理机制主要依赖于浏览器的任务队列

    任务队列分为主任务队列和等待任务队列

    在主任务队列自上而下执行的时候,若遇到一个异步操作,不会立即执行,而是把他放在等待任务队列中去排队,等主任务队列执行完后,再执行等待任务队列

    宏任务和微任务

    异步任务里分工宏任务和微任务

    宏任务有:定时器(setTimeout(),setInterval(),).事件绑定,ajax,回调函数,node中的fs模块,script

    微任务有:promise,async/aswait,procsee.nextTick,MutationObserver(html5新特性)

    执行顺序

    先执行主任务,执行完接着执行微任务,最后执行宏任务,按照条件的顺序依次执行

    这种循环机制又叫事件循环(event loop)

    console.log(1);
            setTimeout(() => {
                console.log(2);
                process.nextTick(() => {
                    console.log(3);
                });
                new Promise((resolve) => {
                    console.log(4);
                    resolve();
                }).then(() => {
                    console.log(5);
                });
            });
            new Promise((resolve) => {
                console.log(7);
                resolve();
            }).then(() => {
                console.log(8);
            });
            process.nextTick(() => {
                console.log(6);
            });
            setTimeout(() => {
                console.log(9);
                process.nextTick(() => {
                    console.log(10);
                });
                new Promise((resolve) => {
                    console.log(11);
                    resolve();
                }).then(() => {
                    console.log(12);
                });
            });
    // 1 7 6 8 2 4 3 5 9 11 10 12
    
  • 相关阅读:
    通过索引优化sql
    索引概述
    Spring整合Mybatis
    Mybatis逆向工程
    Mybatis级联
    Mybatis动态语句
    Mybatis—curd
    (转)最大似然估计&贝叶斯估计
    筛法求质——poj2262&2909
    (转)poj1182食物链
  • 原文地址:https://www.cnblogs.com/wszzj/p/16265000.html
Copyright © 2020-2023  润新知