赞
踩
主线程
相亲交友源码中所有的同步任务都是在主线程里执行的,异步任务可能会在macrotask或者microtask里面
微任务(micro task)
宏任务(macro task)
大致流程
简单的说,事件循环(eventLoop)是单线程的JavaScript在处理异步事件时进行的一种循环过程,具体来讲,对于相亲交友源码的异步事件它会先加入到事件队列中挂起,等主线程空闲时会去执行事件队列中的事件。
主线程任务——>微任务——>宏任务 如果宏任务里还有微任就继续执行宏任务里的微任务,如果宏任务中的微任务中还有宏任务就在依次进行
主线程任务——>微任务——>宏任务——>宏任务里的微任务——>宏任务里的微任务中的宏任务——>直到任务全部完成 我的理解是在同级下,微任务要优先于宏任务执行
在相亲交友源码同一轮任务队列中,同一个微任务产生的微任务会放在这一轮微任务的后面,产生的宏任务会放在这一轮的宏任务后面
在相亲交友源码同一轮任务队列中,同一个宏任务产生的微任务会马上执行,产生的宏任务会放在这一轮的宏任务后面
它不停检查 Call Stack 中是否有任务(也叫栈帧)需要执行,如果没有,就检查 Event Queue,从中弹出一个任务,放入 Call Stack 中,如此往复循环。
同步和异步任务分别进入不同的执行"场所",同步的进入相亲交友源码主线程,异步的进入Event Table并注册函数。
当指定的事情完成时,Event Table会将这个函数移入Event Queue。
相亲交友源码主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
上述过程会不断重复,也就是常说的Event Loop(事件循环)
堆栈和队列简要说明图
为什么先微后宏
微任务会在执行任何其他事件处理,或渲染,或执行任何其他宏任务之前完成。
这很重要,因为它确保了微任务之间的应用程序环境基本相同(没有鼠标坐标更改,没有新的网络数据等)。
如果我们想要异步执行(在当前代码之后)一个函数,但是要在更改被渲染或新事件被处理之前执行,那么我们可以使用 queueMicrotask 来对其进行安排(schedule)
堆(heap)
保存的地址
对象被分配在相亲交友源码堆中,堆是一个用来表示一大块(通常是非结构化的)内存区域的计算机术语。
栈(stack)
后进先出 (lifo) last in first out (坐电梯
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。