同步与异步
- 同步:调用之后得到结果,在干别的任务
- 异步:调用之后不管结果,继续干别的任务
- 进程:程序运行的实例,同一程序可以产生多个进程,一个进程包含一个或多个线程
- 线程:操作系统能够进行运算调度的最小单位,一次只能执行一个任务,有自己的调用栈、寄存器环境,同一进程的线程共享进程资源
JavaScript单线程
- 单线程JS怎么实现异步?(通过浏览器内核多线程实现异步)
- 浏览器的进程(浏览器进程,渲染进程,GPU进程,网络进程,插件进程)
- 渲染进程(GUI线程,JS引擎线程,定时触发器线程,事件触发线程,异步HTTP请求线程)
- GUI线程:渲染布局
- JS引擎线程:解析、执行JS,与GUI互斥线程
- 定时触发器线程:setTimeout、setInterval
- 事件触发线程:将满足触发条件的事件放入任务队列
- 异步HTTP请求线程:XHR所在线程
- 异步场景(定时器、网络请求,事件绑定,ES6 Promise)
定时器
- 过程
- 1.调用webApi(setTimeout)
- 2.定时器线程计数2s
- 3.事件触发线程将定时器时间放入任务队列
- 4.主线程通过Event Loop遍历任务队列
- 使用定时器时需要注意
- 定时器可能不会按时执行(同步任务耗时太久)
- 定时器嵌套5次之后最小间隔不能低于4ms
- 应用场景:防抖 节流 倒计时 动画