一.什么是Event Loop?
想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做"进程"(process),一般情况下,一个进程一次只能执行一个任务。
如果有很多任务需要执行,不外乎三种解决方法。
(1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。
(2)新建进程。使用fork命令,为每个任务新建一个进程。
(3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。
以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,即采用上面的第一种方法。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现"假死",因为JavaScript停不下来,也就无法响应用户的行为。
----单线程运行如图这种运行方式称为"同步模式"(synchronous I/O)或"堵塞模式"(blocking I/O)
HTML5*(多线程):提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JavaScript单线程的本质。
----多线程如图
多线程不仅占用多倍的系统资源,也闲置多倍的资源
-------Event Loop 用于等待和发送消息和事件
程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"(可以译为"消息线程")
相关文章
- JavaScript 异步编程指南 - 探索浏览器中的事件循环机制
- JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念
- 一文梳理JavaScript 事件循环(Event Loop)
- JavaScript 运行机制:Event事件循环机制
- JavaScript 异步编程指南 - 聊聊 Node.js 中的事件循环
- JavaScript运行机制之事件循环(Event Loop)详解
- js 在浏览器中的event loop事件队列
- 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》
- JavaScript事件循环(Event Loop)机制
- 深入理解javascript中的事件循环event-loop