25 # eventloop 执行流程

简介: 25 # eventloop 执行流程

浏览器事件环

1、浏览器的进程

进程是计算机调度的基本单位,进程中包含着线程,浏览器是多进程进程,大致有下面几种

  • 每一个页卡都是进程(互不影响)
  • 浏览器也有一个主进程(用户界面)
  • 每一个页卡里都有一个渲染进程(也叫浏览器内核)
  • 网络进程(处理请求)
  • GPU 进程 3d 绘制
  • 第三方插件进程

2、渲染进程

渲染进程里面包含着多个线程

  • GUI 渲染线程(用于渲染页面)
  • js 引擎线程(和页面渲染时互斥)
  • 事件触发线程(独立的线程 EventLoop)
  • 事件 click、setTimeout、ajax 也是一个独立线程

3、宏任务和微任务

  • 宏任务:宿主环境提供的异步方法都是宏任务,比如:setTimeout、script、ui 渲染
  • 微任务:语言标准提供的 promise、muationObserver

js 执行流程图

例子

例子1:document.body.style.background = "seagreen" 的执行时机在 GUI 渲染的前面,所以刷新不会出现闪一下的效果

document.body.style.background = "salmon";
console.log(1);
Promise.resolve().then(() => {
    console.log(2);
    document.body.style.background = "seagreen";
});
console.log(3);

例子2:document.body.style.background = "seagreen" 的执行时机在 GUI 渲染的后面,所以刷新会出现闪一下的效果

document.body.style.background = "salmon";
console.log(1);
Promise.resolve().then(() => {
    setTimeout(() => {
        console.log(2);
        document.body.style.background = "seagreen";
    }, 0);
});
console.log(3);
目录
相关文章
|
22天前
|
安全 API
muduo源码剖析之EventLoop事件循环类
EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。
47 0
|
22天前
|
安全 Java
【Netty 网络通信】EventLoop 事件循环对象 解析
【1月更文挑战第9天】【Netty 网络通信】EventLoop 事件循环对象 解析
|
8月前
|
JavaScript
26 # eventloop 执行顺序
26 # eventloop 执行顺序
39 0
|
22天前
|
存储 Java
线程池的执行原理
线程池的执行原理
|
22天前
|
Web App开发 前端开发 JavaScript
什么是事件循环 Eventloop
什么是事件循环 Eventloop
52 0
|
22天前
|
NoSQL Java 程序员
多线程并发之线程池Executor与Fork/Join框架
多线程并发之线程池Executor与Fork/Join框架
68 0
|
8月前
04RPC - netty中handler的执行顺序
04RPC - netty中handler的执行顺序
52 0
|
9月前
|
存储 Java
线程池的核心参数和执行流程
本章主要讲解了线程池的核心参数和执行流程
86 0
|
10月前
|
Web App开发 消息中间件 JavaScript
事件循环(even loop)原理解析
1,要弄懂事件循环首先要了解线程和进程 通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。 2, 浏览器是一个多进程多线程的应用程序,内部工作很复杂,它的进程主要包含 浏览器进程 网络进程 渲染进程 ① 浏览器进程: 负者BOM界面展示以
100 0
|
12月前
|
Java 数据处理 C++
c++11线程池的实现原理及回调函数的使用
c++11线程池的实现原理及回调函数的使用