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);
目录
相关文章
|
3月前
|
安全 API
muduo源码剖析之EventLoop事件循环类
EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。
38 0
|
3月前
|
安全 Java
【Netty 网络通信】EventLoop 事件循环对象 解析
【1月更文挑战第9天】【Netty 网络通信】EventLoop 事件循环对象 解析
|
6月前
|
JavaScript
26 # eventloop 执行顺序
26 # eventloop 执行顺序
35 0
|
3月前
|
存储 Java
线程池的执行原理
线程池的执行原理
|
3月前
|
Web App开发 前端开发 JavaScript
什么是事件循环 Eventloop
什么是事件循环 Eventloop
48 0
|
4月前
|
NoSQL Java 程序员
多线程并发之线程池Executor与Fork/Join框架
多线程并发之线程池Executor与Fork/Join框架
63 0
|
6月前
04RPC - netty中handler的执行顺序
04RPC - netty中handler的执行顺序
46 0
|
7月前
goroutine+channel实现对多个goroutine的顺序执行
goroutine+channel实现对多个goroutine的顺序执行
|
7月前
|
存储 Java
线程池的核心参数和执行流程
本章主要讲解了线程池的核心参数和执行流程
77 0
|
10月前
|
Java 数据处理 C++
c++11线程池的实现原理及回调函数的使用
c++11线程池的实现原理及回调函数的使用