宏队列和微队列

1、javascript是一个单线程语言。
javascript 语言的目的(待补充)
2、主线程执行完成之后,再执行微队列,微队列执行完成后再执行宏队列
3、promise的构造函数传入的回调函数是同步执行
4、promise的then函数会直接加入微队列,链式调用的二级的then函数只有在上一层的then执行之后,才会加入微队列
5、宏队列函数 setTimeout、setInterval、setImmediate

从广义上,javascript将任务分为两类,异步任务和同步任务。
整个架构分为两个模块,执行栈和任务队列。
在异步任务执行完成后,会向任务队列中添加事件(回调函数)。
同步任务放置在执行栈中。
1、程序执行时,主线程先执行执行栈,即执行所有的同步代码
2、当执行栈执行完成之后,在执行任务队列中的回调事件。
3、当任务队列为空时,继续回到执行栈执行同步代码。
不断重复该过程。

将javascript的任务进行细分,可以分为宏任务和微任务。
微任务:promise
宏任务:settimeout、setinterval、ajax、dom操作回调、script
1、主线程优先执行 宏任务
2、宏任务执行完成后判断是否存在微任务
3、微任务执行完成后,从任务队列中取出宏任务继续执行
4、任务队列中事件执行完成后,判断是否存在微任务
如果存在继续重复3、4步骤。

任务队列分为两种,宏任务队列和微任务队列。

以上两种执行机制都是循环,因此称作事件循环机制(event loop)。
同步任务、异步任务、宏队列、微队列
事件循环:宏任务和微任务
全方位理解javascript的事件机制
event loop 详解
阮一峰对于javascript事件机制的注解
朴灵对阮一峰的注解(叹为观止)

script代码也是宏任务的一种,所以从宏任务(执行栈)-微任务(微任务队列)-宏任务(宏任务队列)-宏任务(执行栈)这样的说法并没有问题,javascript中任务的执行就是宏任务和微任务的循环。

宏任务、微任务各api优先级:待补充

javascript是单线程,浏览器本身的是多线程
浏览器包括 js线程、ui线程、定时器线程、http异步线程···
js代码执行到非js线程代码时,会将其放到对应的线程执行,对应线程执行完成之后会把回调事件添加到对应的事件队列。
js线程同步代码(宏任务)执行完成之后,会从事件队列中取出相应的回调事件执行。
在这里插入图片描述

JS的循环机制是指如何处理事件循环中的任务。在JS中,事件循环是一种机制,用于处理异步操作和事件处理。循环机制确保任务按照正确的顺序执行,以保证代码的正确性和性能。 在循环机制中,有两种类型的任务:任务(macro-task)和任务(micro-task)。任务包括整体代码块、setTimeout、setInterval等,而任务包括Promise、MutationObserver、process.nextTick等。 当代码执行时,会首先执行当前代码块中的同步任务,然后执行任务队列中的所有任务。接下来,会从任务队列中选择一个任务执行,直到任务队列为空。然后,再次执行所有任务,以此类推。 事件队列是用来存储待执行的任务的数据结构。每个任务或任务都会被添加到事件队列中。当事件循环开始时,会从事件队列中依次取出任务并执行。 需要注意的是,任务的优先级高于任务。也就是说,在执行完当前任务后,会立即执行所有任务,然后再执行下一个任务。这样可以确保任务能够尽早地被执行,避免出现不必要的延迟。 总结一下: - 循环机制确保异步任务按照正确的顺序执行。 - 任务包括整体代码块、setTimeout、setInterval等。 - 任务包括Promise、MutationObserver、process.nextTick等。 - 事件队列用来存储待执行的任务。 - 任务优先级高于任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值