概述

浏览器采用单线程的方式来处理渲染方面的主要任务。
每个渲染进程中都由一个主线程处理;

  • 事件循环机制用来解决新任务插入到主线的问题;
  • IO线程通过IPC机制接收其他进程消息和事件;并压如消息队列之中
  • 消息队列中的每个宏任务都有一个微任务列表,当宏任务将要执行完成时,会执行微任务队列的任务,直到完成再进入下一个宏任务。

消息架构

基于消息队列的设计是目前使用最广的消息架构
image.png

每个渲染进程中都包含渲染主线程和IO线程

事件循环机制

事件循环机制解决往运行的线程中添加新任务的问题

IO线程

渲染进程中的IO线程用来专门接收其他进程或者事件传送进来的消息,并将它插入至消息队列尾部。

消息队列

消息队列是一种数据结构,存放执行的任务。符合先进先出的特点。
用来存放管理消息

宏任务和微任务

消息队列中的每个任务都称之为宏任务
每个宏任务中都存放着一个微任务队列;当宏任务结束前,会执行微任务列表中的任务,完成之后才会执行下一个宏任务。

微任务主要用来解决任务优先级的问题和单个任务执行时间过长的问题。

setTimeout 延迟队列

通过定时器发起的任务都会保存在延迟队列之中
每次事件循环的时候都会检查延迟队列中的任务是否到时间,到点就会执行。
一个例程也就是一个函数。当我们调用一个函数时,执行流程进入函数;当函数执行完成后,执行流程返回给上层函数或例程。期间,每个函数执行共享一个线程栈;函数返回后栈顶的内容自动回收。这就是例程的特点,也是现代操作系统都支持这种例程方式。
协程与例程相对,从抽象的角度来说,例程只能进入一次并返回一次,而协程可能进入多次并返回多次。

参考资料


JTR354
21 声望1 粉丝

读书点亮生活