• eventLoop(浏览器、Node)


    1.基本知识:

    ##进程、线程##

    进程:cpu分配资源的最小单位,同一时间内单个cpu,只能运行一个进程(时间片轮转算法几乎无感知切换多个进程)

    线程:cpu调度的最小单位是线程,一个进程中包含多个线程;

    ##浏览器的进程##

    每个tab页都是一个进程(互不影响)

    浏览器也有一个主进程(用户界面)

    渲染进程 :每个tab页都有一个渲染进程(浏览器内核)

    网络进程:处理请求

    GPU进程:3d绘制

    第三方插件的进程

    ##渲染进程##

    渲染进程包含多个线程,js中的主线程是单线程的

    GUI渲染线程(渲染页面的)

    js引擎线程 和页面渲染是互斥的

    事件触发线程 独立的线程 eventLoop

    事件 click setTimeout ajax 也是一个独立线程

    ##微任务、宏任务##

    宏任务:宿主环境(eg:js语言)提供的异步方法都是宏任务 script ui 渲染

    微任务:语言标准提供的 promise.then  mutationObserver(h5)

    ##栈、队列##

    栈:先进后出,操作都是在一边

    队列:先进先出,进是一边,出是另一边

    2.为什么

    js的主线程是单线程的,为了不阻塞

    3.eventLoop - 浏览器

     宏任务放置的时机是:当ajax成功的时候,定时器成功的时候,点击按钮的时候->将对应的回调放到宏任务队列中

    微任务放置的时机是:只要调用promise、mutationOberserver就直接将回调放到微任务中

    ui渲染的时机是在下一个宏任务执行之前执行

    执行顺序:默认先执行script脚本中的代码->清空微任务(将所有的微任务全部执行完)->渲染页面->取出一个宏任务执行->执行完毕后再次清空微任务队列 .....依此循环往复执行

    备注:async fun funtion() {

      await console.log(1) 

      console.log(2)

      //等同于 Promise.resolve(console.log(1)).then(() => { console.log(2) })

    }

    参考文献:

    1.https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/

  • 相关阅读:
    博客基础_django入门_python从入门到实践_用户登陆、注销与注册
    博客基础_django_python从入门到实践_添加主题_添加条目_编辑条目
    python学习(六)
    python作业(五)
    python学习(五)
    python学习(四)
    python作业(三)
    python学习(三)
    python作业(二)
    python学习(二)
  • 原文地址:https://www.cnblogs.com/lyue1404/p/10410660.html
Copyright © 2020-2023  润新知