Javascript 异步实现 & 事件循环
浏览器的进程和线程 一、js的单线程和异步 js的单线程(single threaded)和异步(asynchronous)两个基本矛盾的概念是怎么整合到js上的 首先必须肯定js本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的 宿主环境通过某种方式(事件驱动)使得js具备了异步的属性 二、浏览器的进程 浏览器的主进程 :负责协调、主控 第三方插件进程 :每种类型的插件对应一个进程,仅当使用该插件时才创建 GPU进程 :最多一个,用于3D绘制等 浏览器渲染进程 (浏览器内核):主要作用为页面渲染,脚本执行,事件处理等 三、浏览器内核线程 1、JS引擎线程 JS引擎一直等待着任务队列中任务的到来,然后加以处理 一个Tab页中无论什么时候都只有一个JS引擎在运行JS程序 2、GUI渲染线程 GUI渲染线程与JS引擎线程是互斥的 当JS引擎执行时GUI线程会被挂起 GUI更新会被保存在一个队列中等到JS引擎空闲时执行 3、定时器线程 传说中的setInterval与setTimeout所在线程 二者的定时计数功能不是由JS引擎完成的,而是通过 单独的线程 来完成的,从而保证计时准确 计时完毕,将回调添加到事件队列中,等待JS引擎空闲执行 4、事件触发线程 点击事件等会在对应条件触发的时候被添加到事件队列,等js引擎空闲执行