EventLoop

JS是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,
所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列
异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。
 
微任务队列的代表就是,Promise.thenMutationObserver
宏任务的话就是script全部代码setTimeoutsetInterval、I/O、UI Rendering、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN

Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。 JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。

(1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。

(2)新建进程。使用fork命令,为每个任务新建一个进程。

(3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。
以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,js使用的是第一种。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现"假死",因为JavaScript停不下来,也就无法响应用户的行为。
posted @ 2021-11-01 14:16  Dz&Ying  阅读(36)  评论(0)    收藏  举报