weijiyang / GOOD-IDEA

这里记录一些灵感~详见ISSUES
1 stars 0 forks source link

什么是事件循环?如何循环? #26

Open weijiyang opened 4 years ago

weijiyang commented 4 years ago

image 详细步骤如下:

  1、所有同步任务都在主线程上执行,形成一个执行栈

  2、主线程之外,还存在一个"消息队列"。只要异步操作执行完成,就到消息队列中排队

  3、一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取消息队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

  4、主线程不断重复上面的第三步

【循环】

  从代码执行顺序的角度来看,程序最开始是按代码顺序执行代码的,遇到同步任务,立刻执行;遇到异步任务,则只是调用异步函数发起异步请求。此时,异步任务开始执行异步操作,执行完成后到消息队列中排队。程序按照代码顺序执行完毕后,查询消息队列中是否有等待的消息。如果有,则按照次序从消息队列中把消息放到执行栈中执行。执行完毕后,再从消息队列中获取消息,再执行,不断重复。

  由于主线程不断的重复获得消息、执行消息、再取消息、再执行。所以,这种机制被称为事件循环

【事件】

  为什么叫事件循环?而不叫任务循环或消息循环。究其原因是消息队列中的每条消息实际上都对应着一个事件

  DOM操作对应的是DOM事件,资源加载操作对应的是加载事件,而定时器操作可以看做对应一个“时间到了”的事件