EventLoop
JS的单线程
JS是一门单线程执行的编程语言。同一事件只能做一件事情。
JS的执行线程
↓
任务1 → 任务2 → 任务3 → 任务N(待执行的任务队列)
单线程执行队列的问题:
如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。
同步任务和异步任务
为了防止某个耗时任务导致程序假死的问题,JavaScript把待执行的任务分为了两类:
- 同步任务 (synchronous)
- 又叫做非耗时任务,指的是在主线程上排队执行的那些任务
- 只有前一个任务执行完毕,才能执行后一个任务
- 异步任务 (asynchronous)
- 又叫做耗时任务,异步任务由JavaScript委托给宿主环境进行执行
- 当异步任务执行完成后,会通知JavaScript主线程执行异步任务的回调函数
宿主环境就是JS的执行环境,在浏览器里面运行JS,浏览器就是JS的宿主环境,在Node.js…
同步任务和异步任务的执行过程
EventLoop的基本概念
JavaScript主线程从“任务队列”中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的,所以整个的这种运行机
制又称为EventLoop(事件循环)。
练习
分享文章
面试必问之 JS 事件循环(Event Loop),看这一篇足够(https://zhuanlan.zhihu.com/p/580956436)