事件循环
游览器进程模型
程序运行的内存空间 为进程
每个进程相互独立,即使通讯,也需要双方同意
线程>?
运行代码的东西称之为线程
一个进程至少有一个线程,所以在进程开启后会自动创建一个线程,该线程称之为主线程.
主线程结束主程序就结束了,一个进程可以包含多个线程
游览器是一个多进程多线程的应用程序
1游览器进程 标签页的样式 后退前进刷新 用户交互,多个线程
2网络进程 负责加载网络
3渲染进程
渲染进程启动后,会开启一个渲染主线程,主线程负责执行 html css js 代码,为每个标签页 开一个新的渲染进程,保证不同标签页之间不互相影响
渲染主线程是如何工作的?
解析html css 计算样式 布局 处理图层 每秒把页面画60次 执行全局计算代码 执行事件处理函数 执行计时器的回调函数
渲染主线程 处理问题:排队
消息队列 事件队列 依次执行
1最开始渲染主线程会进入一个无限循环
2每次循环拿到下一个任务从消息队列里去拿,没有任务休眠
3其他线程可以随时向消息队列添加任务
整个过程称为 事件循环 消息循环
若干解释
何为异步?
代码执行过程中,无法立即执行的任务
定时器 setTimeout setInteval
网络通讯 XHR Fetch
用户操作 addEventListener
如果渲染主线程等待这些任务的时机到达,导致主线程长期处于阻塞 导致游览器[卡死]
渲染主线程无论如何不能阻塞
任务有优先级?
消息队列有优先级
谷歌游览器chrome
延时队列 中
交互队列 高
微队列 最高
结果 5 4 3 1 2
5 1 2 3
单线程是异步产生的原因 时间循环是异步的实现方式