美文网首页
js同步编程与异步编程

js同步编程与异步编程

作者: 路上灵魂的自由者 | 来源:发表于2019-02-25 14:44 被阅读2次

    /*

    * JS中的同步编程和异步编程

    * 同步编程: 任务是按照顺序依次处理,当前这件事没有彻底昨晚,下一件事是执行不了的

    *  异步编程: 当前这件事没有彻底昨晚,需要等待一段时间才能继续处理,此时我们不等,继续执行下面的任务,当后面的任务完成后,再去把没有彻底完成的事情完成

    *

    * 【js中的异步编程】

    *     1.所有的事件绑定都是异步编程 xxx.onclick = function(){}

           2.所有定时器都是异步编程 setTimeout(function(){},1000)

           3.AJAX中一般都使用异步编程处理

           4.回调函数也是异步编程

            ...

    *

    */

    /*

        let n = 0;

        setTimeout(()=>{

            console.log(++n)  //1

        },1000)

        console.log(n) 0

    */

    /*

        //定时器设定一个时间,到达时间后不一定执行(如果当前还有其他的同步任务正在处理,那么到时间了也得等着)

        let n = 0;

        setTimeout(()=>{

            console.log(++n) //没有输出

        },1000)

        console.log(n) 0

        while(1===1){

            //死循环

        }

    */

    // => 浏览器如何规划同步异步机制的

    // 1.浏览器是多进程的,js是单线程的(浏览器只会给js执行分配一个线程):单线程得特点就是一次只能处理一件事情

    // 进程:每一个应用程序都可以理解为一个进程,(浏览器打开一个页面,就相当于开辟一个进程),在一个程序中(进程中)我们经常会干好多事情,此时我们可以分配多个线程去同时完成多项任务

    // 2.js在单线程中实现异步得机制,主要依赖于浏览器得任务队列完成得。浏览器中有两个任务队列(主任务队列,等待任务队列)


    // js实现异步编程的底层原理

    // 1.在主任务自上而下执行得时候,如果遇到一个异步操作任务,没有立即执行,而是把它放到等待任务队列中排队

    // 2.当主任务队列完成后才会等待任务队列进行查找(主任务队列完不成,不管等待任务队列中是否有达到时间得,都不处理,继续等待主任务队列完成得,因为js是单线程得【一次只能处理一件事情】)

    // 3.等待任务队列谁达到条件了(如果有很多都到达了条件,谁先到达得,就先处理谁),就把这个任务从新放到主任务队列中去执行,把这个任务执行完成后,再去等待中查找.....

     js实现异步编程的底层原理

    /*

        setTimeout(()=>{

            console.log(1)

        },20)

        console.log(2);

        setTimeout(()=>{

            console.log(3)

        },10)

        setTimeout(()=>{

            console.log(4)

        },100)

        // console.time("AA")

        let startTime = new Date();

        for(let i = 0;i<90000000;i++){}

        console.log(5)

        // console.timeEnd("AA")

        console.log(new Date() - startTime)

        答案: 2 5 3 1 5

    解析

    */


    /*

        let n = 0;

        setTimeout(()=>{

            console.log(++n)

        },0) // => 定时器时间因子设置为零不是立即执行,每个浏览器都有一个自己最小的等待和反应时间(谷歌:5-6s IE:10-13),所有写零还是异步编程

        console.log(n)

    */

    相关文章

      网友评论

          本文标题:js同步编程与异步编程

          本文链接:https://www.haomeiwen.com/subject/ihcgyqtx.html