js单线程理解
一.进程和线程
1.进程: 是CPU资源分配的最小单位(是能拥有资源和独立运行的最小单位)。
2.线程: 是CPU调度的最小单位(线程是建立再进程的基础上的一次程序运行单位,一个进程可以有多个线程
3.单线程和多线程: 都是指再一个进程内的单和多
二.浏览器是多进程的,每个窗口都是一个进程,可以打开任务管理器查看到多个进程任务
三.浏览器包含哪些进程
1.主进程
- 协调控制其他子进程(创建,销毁)
- 浏览器页面显示,用户交互,前进,后退,收藏
- 将渲染进程得到的内存中的Bitmap,绘制到用户界面上
- 处理不可见操作,网络请求,文件访问等
2.第三方插件进程
- 每种类型的插件对应一个进程,仅当使用改插件的时候才创建
3.GPU进程
- 勇于3D绘制等
4.渲染进程,就是我们说的浏览器内核
- 负责页面渲染,脚本执行,事件处理等
- 每一个tab页一个渲染进程
四.浏览器内核(渲染进程)
1.GUI渲染进程
- 负责渲染页面,布局和绘制
- 页面需要重绘和回流时,改现成就会执行
- 与js引擎线互斥,防止渲染结果不可预期
2.JS引擎线程
- 负责处理解析和执行javascript脚本程序
- 只有一个JS引擎线程(单线程)
- 与GUI渲染线程互斥,防止渲染结果不可预期
3.事件触发线程
- 用来控制时间循环(鼠标点击、setTimeout、ajax等)
- 当时间满足出发条件时,将事件放入到JS引擎所在的执行队列中
4.定时触发器线程
- setInterval与seTimeout所在的线程
- 定时任务并不是由JS引擎计时的,是由定时触发线程计时的
- 计时完毕后,通知事件触发线程
5.异步http请求线程
- 浏览器有一个单独的线程用于处理AJAX请求
- 当请求完成时,若有回调函数,通知事件触发线程