一.JavaScript是单线程的,也就是说,同一个时刻,JavaScript只能执行一个任务,其他任务只能等待。
二.为什么JavaScript是单线程的
js是运行于浏览器的脚本语言,因其经常涉及操作dom,所以设置为单线程操作。如果是多线程的,也就意味着,同一个时刻,能够执行多个任务。试想,如果一个线程修改dom,另一个线程删除dom,那么浏览器就不知道该先执行哪个操作。所以js执行的时候会按照一个任务一个任务来执行。
三. 为什么任务要分为同步任务和异步任务
试想一下,如果js的任务都是同步的,那么遇到定时器、网络请求等这类型需要延时执行的任务会发生什么?
页面可能会瘫痪,需要暂停下来等待这些需要很长时间才能执行完毕的代码
所以,又引入了异步任务。
- 同步任务:同步任务不需要进行等待可立即看到执行结果,比如console
- 异步任务:异步任务需要等待一定的时候才能看到结果,比如setTimeout、网络请求
四.事件循环
浏览器本身是⼀个复杂的系统,它要做的事情⾮常多,例如: 执⾏js代码,请求图⽚资源,解 析css,渲染⻚⾯,响应⿏标的点击等等。在实现层⾯,浏览器内部会⽤不同的功能模块去完成不同的 事情。这些不同的模块就体现为进程。
进⼀步把进程进⾏划分:
1.主进程。⽤来协调控制其他⼦进程。2.GPU进程。⽤于3D绘制等。3.渲染进程。就是我