• js-基础总结3


    1. 事件队列( JS的任务队列 )

    浏览器是多线程的:

    1. GUI渲染线程
    2. HTTP网络请求线程( 6-7个 )
    3. 事件监听、定时器监听

    JS的代码运行时单线程的,浏览器只分配一个GUI线程去执行我们的JS代码

    1. 对于大部分JS代码来讲,上面代码没有执行完成,下面的代码时不能执行的 " 同步编程 "
    2. 但是对于某些JS代码来讲( 事件绑定、定时器、Promise、async/await、ajax )等,我们在上面的代码没有处理的情况下,GUI线程能继续向下执行"异步编程"

    GUI渲染过程中遇到异步操作,都会放置在Event Queue事件队列中

    当浏览器件所有同步代码执行完成,回到事件池中( 事件队列/任务队列中 )查找,例如定时器,到时间了放到GUI中去执行,代码执行完成,又去事件池中查找,我们将这样的循环成为:Event Loop事件循环机制

    Event Queue 优先级队列

    微任务优先级永远高于宏任务,宏任务的优先级是按照谁先到达执行谁先执行

    微任务:promise / async / await ( nodejs )

    宏任务:事件绑定、定时器、ajax异步请求

    先找微任务,微任务中还有,则继续找微任务,一直到没有微任务了,才去宏任务中查找

    async function async1(){
      console.log('async1 start')
      await async2()
      console.log('async1 end')
    }
    
    async function async2(){
      console.log('async2')
    }
    
    console.log('script start')
    
    setTimeout(()=>{
      console.log('setTimeout')
    },0)
    async1()
    new Promise(function(resolve){
      console.log('promise1')
      resolve()
    }).then(funciton(){
    	console.log('promise2')        
    })
    console.log('script end')
    
  • 相关阅读:
    多媒体基础知识之PCM数据
    FFmpeg在Linux下编译使用
    AndroidStudio 中使用FFMPEG
    Android 音频播放分析笔记
    【Linux 命令】- more和less
    【Linux】- 简明Vim练习攻略
    【Linux】- 对find,xargs,grep和管道的一些理解
    【Linux 命令】- find 命令
    【Linux 命令】- tar 命令
    【Linux】- CentOS7 下 安装 supervisor
  • 原文地址:https://www.cnblogs.com/ycyc123/p/14823927.html
Copyright © 2020-2023  润新知