面试题⑧

异步:

异步 async 是相对于同步 async 而言的,同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务。

同步任务:
指的是在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。

异步任务:
指的是不进入主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

  1. 同步和异步任务在不同的执行"场所",同步的进入主线程,异步的进入Event Table执行并注册函数。

js中使用:
当JS解析执行时,会被引擎分为两类任务,同步任务(synchronous) 和 异步任务(asynchronous)。

对于同步任务来说,会被推到执行栈按顺序去执行这些任务。

对于异步任务来说,当其可以被执行时,会被放到一个 任务队列 里等待JS引擎去执行。

当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。这种循环检查的机制,就叫做事件循环。

JavaScript 执行机制:
主线程任务——>微任务——>宏任务
如果宏任务里还有微任就继续执行宏任务里的微任务,如果宏任务中的微任务中还有宏任务就在依次进行

宏任务和微任务
1.两者都是异步
2.进程的切换肯定是宏任务,因为需要花费大量的资源
3.线程的切换是微任务,因为只需要在同一个进程中切换就可以了
4.更准确的说,很多微任务都是纤程的切换导致的,纤程是比线程更小的概念
5.为什么和定时器有关的任务是宏任务?

因为计时是实时的,它一定不能被阻塞,所以定时器被设计在另一个进程中被管理,所以,定时器任务会有进程的切换,所以只能是宏任务

6.事件为什么是宏任务呢?

事件的触发是依赖于浏览器的实现,平台有它自己的事件注册和派发机制,比如nodeJS用的内核libuv,所以不管怎样,事件的独立注册表和派发机制导致,他也不会和JS存在一个进程中,事件的管理中心一定是在另外一个进程中实现的,那么去派发事件,也就是宏任务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值