浏览器常驻线程有下面这些
- js 线程
- GUI线程 和 js 线程互斥
- http 网络请求线程
- 定时器触发线程
- 浏览器事件处理线程
分别监听各自线程上的事件,当事件完成之后,将回调放入event quenue当中。所有非js线程是用来辅助js祝线程,通过将各自线程当中的任务执行完毕时将其注册的回调放入event quenue 当中,当js祝线程同步任务执行完毕时,就会去event quenue当中查找任务。
js 执行机制 - 单线程
js 设计出来是为了与用户交互,处理dom ,如果js是多线程,同一时间内一个线程想要修改dom,另一个线程想要删除dom,问题就变得复杂很多。
- 大量数据操作怎么办:单线程计算能力有限,大量数据需要计算渲染的话,可以配合后端进行操作,比如ssr技术
javascript 是基于单线程运行的,同时又是可以异步执行的,一般这种既是单线程又是异步的语言都是基于事件来驱动的,恰好浏览器就给javascript提供来这么一个环境。
对于同步,直接进去主线程去执行,对于异步任务,进去event table,当指定的事件完成的时候,将事件回调推入event quenue队列中。