一、JS运行原理

(1)进程与线程

  1. 进程:是计算机中的程序关于某数据集合上的一次运行活动(正在运行中的程序),是系统进行资源分配和调度的基本单元;
  2. 多进程:启动多个进程(程序),多个进程可以一块来执行多个任务;
  3. 单线程:进程内一个相对独立的,课调度的执行单元,在同属的一个进程共享者进程中的资源;(线程是进程当中的基本单位。同一时间,只能作一件事情)
  4. 多线程:启动一个进程,在一个进程内部启动多个线程,这样,多个线程也可以一块执行多个任务;(也是通过调度来做的,如同多进程能做多任务一样,多线程也能做多任务)

举例:

  1. 工厂的资源 -> 系统分配的内存(独立的一块内存)
  2. 工厂之间的相互独立 -> 进程之间相互独立(不能访问其它进程的资源)
  3. 多个工人协作完成任务 -> 多个线程在进程中协作完成任务
  4. 工厂内有一个或多个工人 -> 一个进程由一个或多个线程组成

(2)浏览器的运行原理

browser进程,第三方插件进程,GPU进程,浏览器渲染引擎进程(浏览器内核);

浏览器渲染引擎进程(浏览器内核)是多线程的:

  1. js引擎线程(单线程)避免DOM冲突
  2. GUI 线程 (互斥)
  3. http 网络请求线程(webAPIs)
  4. 定时触发线程
  5. 浏览器事件处理进程

问1:数据量大(计算、渲染)了会怎样?
渲染:GUI
计算:SSR(服务端渲染技术)、webworker(申请JS引擎线程子线程、不允许访问DOM)

问2:数据量小了会怎样?
采用异步

(3)JS的运行原理

js引擎线程(单线程)、可以异步执行(事件驱动的方式模拟的异步)

不同的环境基于异步的事件驱动模型可能会不同

事件驱动模型:

javaScript 怎么使用多线程处理函数 js实现多线程机制_单线程

javaScript 怎么使用多线程处理函数 js实现多线程机制_js_02


Web APIs 存放异步线程,注册回调函数并挂起,然后当主线程执行完毕后,将注册的回调函数放入任务队列,然后事件轮循会查看主线程,如果是空的话就抽取任务队列的第一个任务推入到主线程,然后执行,一直到任务队列为空