学习日记之事件循环

前言:本文为个人学习日记,记录前端的成长之路,所有的见解,知识都是学习而来,录此文章只是为了记录知识更好的学习!

个人概括:事件循环目前在我的认识里,它属于是游览器的一种进程模型。

进程

进程:游览器的多进程的,进程就相当于是个某一个应用分配一个一定的空间,然后这个应用就可以在分配到的该区域进行一些操作。如若该应用崩溃,不会影响其他进程,也就是为什么我们多开游戏崩溃一个另一个还安然无恙的原因!

线程

线程:线程就是基于进程,在进程得到的区域内进行一系列的操作,一个进程最低要拥有一个线程且可以拥有多个线程,线程又分为主线程和异步线程,进程的运行靠线程去进行运作的!
注意:在同一个进程下的线程可以相互访问数据,但是不同进程下的不可以,不同的进程不可以进行相互访问,不可用不代表绝对不行,有方法但是不建议。

渲染主线程

渲染主线程:游览器会拥有一个渲染主线程,也即是游览器最忙最累的一个线程,在这个线程里面,他要处理一系列步骤,然后直至呈现给我们,例如解析html,解析css,计算样式,布局,处理图层,绘画页面,执行js等等,

消息队列

息队列:简单说就是用于区分js的任务的一个处理方式,最开始的他会有一个无限循环,然后里面有主线程,然后还会有一个消息队列,在一定时间内会去检查消息队列是否存在任务,如果有,就取出第一个给主线程进行处理,如果没有就会进入休眠状态,然后当消息队列再次出现任务的时候,就会继续进入状态,把第一个消息队列的给到主线程,消息队列新添加的任务都在队列末尾的,这样他就可以有条不紊的进行工作。

异步

异步:可以理解为js代码在运行中,遇到一些特别费时费力的任务的处理方式的一种解决方案,比如说js里有一些延时任务,setTimeout(),setInterval(),这些是计时完成后的任务,还有一些用户交互的任务,比如说click点击之后等等,如果让主线程等待这些任务,会出现阻塞状态,然后被卡死,这个时候异步方案就可以解决这个问题,他会有一个计时队列,然后把耗时任务放到计时队列里,然后进行依次执行,当主线程任务结束之后,且计时队列任务耗时完成的时候,放到主线程任务进行执行。

异步优先级

严格意义来说,任务是没有的,在消息队列中先进先出但消息队列是有优先级的

根据 W3C 的最新解释:
      1:每个任务都有⼀个任务类型,同⼀个类型的任务必须在⼀个队列,不同类型
的任务可以分属于不同的队列。
在⼀次事件循环中,浏览器可以根据实际情况从不同的队列中取出任务执
⾏。
     2:浏览器必须准备好⼀个微队列,微队列中的任务优先所有其他任务执⾏
    https://html.spec.whatwg.org/multipage/webappapis.html#p
    erform-a-microtask-checkpoint
在⽬前 chrome 的实现中,⾄少包含了下⾯的队列:
延时队列:⽤于存放计时器到达后的回调任务,优先级「中」
交互队列:⽤于存放⽤户操作后产⽣的事件处理任务,优先级「⾼」
微队列:⽤户存放需要最快执⾏的任务,优先级「最⾼」
注意:宏队列,也就是宏任务,已被取消了
结束语:记录学习,记录时光,帮助他人,以上是我对于时间循环的一些了解,可能不是很好,只是一个普普通通从开始学记录知识的小菜鸟,以后有新认识新看法会翻新,不喜勿喷,有意见欢迎评论区留言,谢谢!!!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值