1、进程与线程

  • 进程:可以理解为一个程序(浏览器打开一个页面就是开辟了一个进程)
  • 线程:程序中具体做事情的人

一个进程中可以包含很多线程,一个线程同时只能做一个事情

2、同步编程与异步编程

  • 同步编程:一件一件的去做,上一件事情没有完成,则无法处理下一个事情【单线程】
  • 异步编程:上一个事情未完成,下一个事情可以继续处理【多线程,基于单线程的EventLoop机制...】

3、js中的异步编程(宏任务、微任务)

  • 异步微任务:promise、async/await 【generator】、requestAnimationFrame
  • 异步宏任务:定时器、ajax【HTTP网络请求】、事件绑定...
  • js中大部分代码都是同步编程,但是可以基于单线程的EventLoop(事件循环机制)实现出异步的效果

4、浏览器多线程

打开一个页面,浏览器会分配很多现场,同时处理一些事情

  • GUI渲染线程:自上而下渲染页面
  • JS引擎(渲染)线程:JS单线程是因为,浏览器只会开辟这一个线程,来执行JS代码
  • HTTP网络请求现场:加载资源文件和一些数据
  • 定时器监听线程:监听定时器是否到达时间
  • DOM事件监听现场:监听DOM事件的触发
  • ...

5、JS中的事件循环机制【EventLoop】

android 渲染线程 渲染线程是什么意思_android 渲染线程

 

 

代码执行顺序:同步任务-->异步微任务-->异步宏任务

严格按照这个顺序执行,代码自上而下执行,遇到异步任务,将这些任务先存放到【EventQueue】任务队列中,不执行,主线程继续向下执行同步任务;全部同步任务执行完之后,待主线程空闲下来,才开始处理微任务,待微任务全部处理完成之后,才处理宏任务。

异步任务中的优先执行顺序:

  • 先执行微任务
  • 微任务中:一般是谁先放置的谁先执行
  • 宏任务中:一般是谁先到达的谁先执行

☆多个定时器的时候,执行过程中要注意执行时间,有些的定时器在同步任务还未完成时,就到达时间了,就要与【后面的定时器】区分开来,之前的定时器还是按照到达时间的先后顺序执行

android 渲染线程 渲染线程是什么意思_主线程_02

☆小知识点:time监测【受系统性能的影响】

console.time('AA');  
console.timeEnd('AA');

 浏览器抛出异常,也会阻碍主线程的渲染

  • 死循环:主线程被彻底占用死,后面的任务都无法处理
  • 抛出异常:只会影响下面的同步任务不执行,已经放到EventQueue事件队列中的异步任务继续执行

android 渲染线程 渲染线程是什么意思_异步任务_03