当前位置:主页 > 查看内容

js异步执行与同步执行的解析

发布时间:2021-06-04 00:00| 位朋友查看

简介:基本概念 微任务队列中的任务可称为 微任务 消息队列中的任务可称为 宏任务 调用栈也可以称为 主线程 单线程 单线程指的是只有一个主线程的线程代码的执行由一个主线程来完成。 JavaScript就是一个单线程的语言 为什么js是单线程如果一个线程在一个节点中添……
基本概念:
  • 微任务队列中的任务可称为微任务
  • 消息队列中的任务可称为宏任务
  • 调用栈也可以称为主线程
单线程:
  • 单线程指的是只有一个主线程的线程,代码的执行由一个主线程来完成。
  • JavaScript就是一个单线程的语言
为什么js是单线程?如果一个线程在一个节点中添加内容,另一个线程要删除这个节点。所以为了不必要的麻烦,js就是一门单线程语言。
js的异步执行分析:
  • 拿现实生活来举例,比如一个人在家(单线程),你既要煮饭又要炒菜。
  • 那么你可以怎么做呢?你可以把煮饭分为两段。
  • 第一段先把米放入电饭煲交给了电饭煲处理(电饭煲就是一个模块),再去炒菜,炒完菜再处理第二段也就是把煮好的饭拿出来。
  • 把饭放入电饭煲煮的过程就称之为异步。饭煮好了会自动跳转,这就相当于异步任务被对应的模块解析好了会自动放入消息队列,等待事件循环调入主线程执行。
  • 主线程任务执行完成,会通过不断的循环消息队列,来执行其中的任务。
  • 也就是你把炒菜完了,你就会不断的观察饭是否跳转(也就是循环消息队列看是否有任务),如果有就把饭装到碗里开始吃饭,此时任务就全部完成。
  • 但是干活的始终还是一个人,这就是单线程的异步执行过程。
简单图解:

在这里插入图片描述

补充执行顺序:
  • 而常见的promise,async,await 执行放入的是微任务队列中,主线程的代码执行完后,会优先循环微任务队列的代码,再是消息队列。
  • 主线程 > 微任务队列 > 消息队列
  • 注意!!消息队列与微任务队列的任务都是先进先执行。
js的同步执行分析:
  • 代码由上至下执行。前面任务在执行,后面代码必须排队等待。
  • 就如上面的例子如果不做异步处理,让任务同步执行就会一直卡在做饭的地方,等饭煮好了才能去炒菜。
感兴趣还可以关注我的:

cnsd:m0_46217225

掘金:寸头男生

github:Buzz_cut

微信公众号:web_mycode

知乎:寸头男生

我的QQ:2356924146

我会持续的编程干货。

;原文链接:https://blog.csdn.net/m0_46217225/article/details/115583284
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐