个人理解的异步

15 篇文章 0 订阅

这篇文章是我看了多篇博客后自己的归纳总结:给有需要的朋友一些帮助:

什么是同步,什么是异步简单表达就是

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

当然这篇文章主要是讲异步的详情

首先要了解一个知识点(js还存在其他的线程):个人觉得很重要

单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个,一般称它为主线程。
但是实际上还存在其他的线程,例如:处理AJAX请求的线程、处理DOM事件的线程、定时器线程、读写文件的线程等等。这些线程可能存在于JS引擎之内,也可能存在于JS引擎之外,在此我们不做区分,不妨称它们为工作线程吧。
但是工作线程完全受主线程控制,且不得操作DOM,并没有改变JavaScript单线程的本质。

异步执行步骤
所有同步任务都在主线程上执行,形成一个执行栈(execution context stack),主线程之外,还存在一个"任务队列"(task queue)。

"任务队列"是一个先进先出的数据结构,排在前面的事件,优先返回主线程。这就是为什么点击事件总是最先触发,因为点击事件触发的时候,回调函数会立即添加到任务队列中。而ajax是在网络请求完成返回之后,才将回调添加到任务队列中。

只要异步任务有了运行结果 ,就在任务队列中放置一个事件;而同步任务继续执行下去,当所有的同步任务执行好后:
就会读取任务队列,查看任务队列中哪些任务好了,之后调用回调函数,会不断重复异步执行步骤,这就是事件循环,取一个消息并执行的过程叫做一次循环。

从异步过程的角度看,addEventListener函数就是异步过程的发起函数,事件监听器函数就是异步过程的回调函数。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值