牛客---图解事件循环与消息队列


前言

V8引擎如何实现同步的.

JS是单线程运行的 同步任务放入调用栈(比如函数执行完即弹出栈), 异步任务(定时器、事件、ajax、promise)则挂起 推入到任务队列中,
同步任务完成之后,使用事件循环机制取出异步任务

1 事件循环

1执行JS代码的时候,当遇到同步任务时,直接推入调用栈,遇到异步任务则挂起。等异步任务有返回之后推入调用栈,待调用栈里所有同步任务完成之后,再将任务队列里的按序执行

在这里插入图片描述
2.同步任务完成之后弹出栈在这里插入图片描述

  1. 接着遇到异步任务,将其挂起,推入进来并没有执行,
    在这里插入图片描述

  2. 异步任务有一个挂起区域,不同的异步任务,挂起地方不一样 。如果是ajax 推入网络进程
    紧着着,执行同步任务二,执行完毕之后弹出栈
    在这里插入图片描述

  3. 挂起异步任务二

在这里插入图片描述

  1. 任务1,2的顺序不一定 异步任务挂起交给对应的进程去处理 这些处理的机制下面将
    此时调用栈空了,此时事件循环机制 ,到任务队列中去异步任务
    在这里插入图片描述
  2. 执行完毕,弹出异步任务1 压入异步任务2

在这里插入图片描述

2 消息队列

消息队列的任务分成

宏任务: 由浏览器发起的,直接存入消息队列中的,每一个宏任务都包含一个微任务队列。

   具体事件: 1.执行script内部代码 2.定时器	3.ajax请求

微任务: 有js引擎发起的,等宏任务完成之后,再去执行当前宏任务的微任务。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值