Mesa llvmpipe和softpipe对比
Mesa 后端性能分析:LLVM vs Software Pipe
当调试没有显卡的时候,可以使用cpu软件模拟的mesa-3d,后端采用kms_swrast_dri.so,发现管线使用llvmpipe的速度明显优于softpipe;
背景介绍
Mesa 是一个开源的图形库,实现了 OpenGL 和 Vulkan 等多种图形 API。它采用了前端与后端分离的架构设计,为灵活支持不同硬件和软件渲染提供了基础。
-
前端(Frontend):负责处理应用程序的 API 调用(如 OpenGL、Vulkan 等),并将其翻译为通用的图形指令或中间表示(IR, Intermediate Representation)。常见的前端模块包括:
libGL.so
:实现 OpenGL。libvulkan.so
:实现 Vulkan。- 其他转换层,如 Gallium Nine(用于 DirectX 支持)或 Zink(通过 Vulkan 实现 OpenGL)。
-
后端(Backend):负责执行具体的渲染任务,包括硬件加速(GPU)或软件渲染(CPU)。后端从前端接收翻译后的图形指令并生成最终的像素数据。常见的后端模块包括:
- 硬件后端:如
amdgpu_dri.so
(AMD GPU)、nouveau_dri.so
(NVIDIA GPU)。 - 软件后端:如
kms_swrast_dri.so
(纯 CPU 软件渲染)。
- 硬件后端:如
在没有 GPU 硬件支持的场景下,Mesa 提供了两种后端渲染管线实现:
- LLVM 后端:基于 LLVM 编译框架,生成针对硬件优化的高效机器码。
- Software Pipe 后端:纯软件实现的 GPU 渲染模拟,主要作为参考实现或性能不敏感场景的备用方案。
通过这种架构,Mesa 实现了跨硬件和跨平台的图形渲染能力,在没有 GPU 的情况下,也能通过 CPU 提供软件渲染的支持。
一、核心概念解析
1. 什么是机器码?
机器码是 CPU 可以直接执行的指令。它由编译器将高级语言代码翻译而来,特点包括:
- 直接执行:无需额外解释或翻译,运行效率高。
- 硬件相关性:根据具体的 CPU 架构(如 x86、ARM)生成,紧密贴合硬件特性。
机器码的效率直接决定了程序的性能。例如:
- 优化后的机器码会充分利用 SIMD 指令集、寄存器分配等特性。
- 未优化的机器码可能产生大量无效操作和内存开销,导致性能瓶颈。
2. Mesa 后端的机器码生成方式
无论是 LLVM 后端 还是 Software Pipe 后端,最终都需要生成机器码运行。但两者的生成方式不同:
- LLVM 后端:
- 通过 LLVM 框架优化生成高效机器码,充分利用硬件资源。
- 针对 SIMD 指令、多线程并行化等硬件特性进行深度优化。
- Software Pipe 后端:
- 生成通用的机器码,但主要依赖解释执行的逻辑模拟 GPU 行为,缺乏硬件优化。
基础指令集和SIMD指令集区别:
基础指令集:
A = [1, 2, 3, 4] # 数据1
B = [5, 6, 7, 8] # 数据2
C = [ ] # 结果
for i in range(4):C[i] = A[i] + B[i] # 一次只处理 A 和 B 的一个元素SIMD指令集:
A = [1, 2, 3, 4] # 数据1
B = [5, 6, 7, 8] # 数据2
C = [ ] # 结果
SIMD_add(A, B, C) # 一次指令处理 A 和 B 中的所有元素
二、LLVM 后端与 Software Pipe 后端性能对比
1. LLVM 后端的优势
(1) 高效的代码生成
LLVM 后端通过以下步骤生成高效的机器码:
- 中间表示(IR)优化:
- 指令重排:重新组织指令顺序,减少流水线阻塞。
- 循环展开:将小循环展开为连续代码块,减少循环控制开销。
- 常量折叠:在编译阶段提前计算不变的常量表达式。
- 目标机器码优化:
- SIMD 支持:利用 SIMD 指令集(如 AVX、SSE)批量处理数据。
- 寄存器优化:减少内存访问,充分利用 CPU 的寄存器。
例子:假设 GLSL 着色器代码如下:
vec4 color = texture(sampler, uv) * factor;
- LLVM 后端生成的优化机器码(伪代码):
SIMD_LOAD r1, [sampler] // 加载纹理数据(SIMD,一次加载 4 个像素)SIMD_MUL r1, r1, [factor] // 批量乘法(SIMD,一次处理 4 个像素)SIMD_STORE r1, [output] // 保存结果(SIMD)通过 SIMD指令,LLVM 后端一次性处理 4 个或更多像素数据,显著提升性能。
- softpipe 后端的机器码(伪代码):
MOV r1, [sampler] // 加载纹理数据(逐个加载)MOV r2, [uv] // 加载 UV 坐标CALL sample_texture // 调用纹理采样函数(逐步执行)MOV r3, [factor] // 加载因子MUL r4, r2, r3 // 标量乘法(逐个分量处理)MOV [output], r4 // 保存结果每次只能处理一个像素,所有操作都需要逐步执行,效率极低。
(2) 并行化支持
- 多线程支持:LLVM 后端能够将渲染管线中的任务分配到多个线程运行。
- SIMD 加速:利用 CPU 的 SIMD 指令集,加速矩阵计算、向量操作等任务。
例子:假设需要光栅化 1000 个三角形:
- 单线程执行:逐个处理,性能瓶颈明显。
- 多线程执行(LLVM):将任务分解为 4 个线程,每个线程并行处理 250 个三角形,显著提升效率。
2. Software Pipe 后端的特点
(1) 通用性实现
- Software Pipe 的设计目标是通用模拟 GPU 渲染行为,而不是性能优化。
- 每一步渲染管线(如顶点着色、光栅化)通过解释逻辑执行。
(2) 缺乏硬件优化
- 不支持 SIMD 或多线程。
- 无法利用 CPU 的高级指令集,只执行基础指令。
(3) 性能瓶颈
- 由于其“逐步解释”的逻辑,Software Pipe 在复杂任务(如光栅化、着色器执行)中效率远低于 LLVM 后端。
3. 性能对比总结
维度 | LLVM 后端 | Software Pipe 后端 |
---|---|---|
机器码生成 | 针对硬件优化,生成高效机器码 | 通用逻辑生成,效率较低 |
硬件适配 | 支持 SIMD、寄存器优化 | 无优化,仅依赖基础指令集 |
并行化支持 | 支持多线程和 SIMD 加速 | 并行支持较弱 |
适用场景 | 性能敏感任务(如无 GPU 的高负载场景) | 测试、调试或低性能场景 |
三、硬件环境如何选择最优后端?
1. 硬件形态分析
根据不同硬件环境,选择后端的策略如下:
硬件环境 | 推荐后端 | 原因 |
---|---|---|
高性能 CPU | LLVM 后端 | 利用多核、多线程和 SIMD 指令集提升渲染效率。 |
低性能嵌入式设备 | Software Pipe | 硬件限制多,选择简单的通用实现。 |
云端/虚拟化环境 | LLVM 后端 | 无 GPU 场景中提供接近 GPU 的软件渲染性能。 |
调试/开发环境 | Software Pipe | 不追求性能,仅需参考实现以测试功能。 |
2. 动态选择策略
可以通过以下脚本动态选择后端:
- 伪代码示例
// openharmoy系统中可能采用这个无效
if [ "$(grep -c 'asimd' /proc/cpuinfo)" -gt 0 ]; thenecho "NEON/ASIMD detected. Using LLVMpipe."export MESA_LOADER_DRIVER_OVERRIDE=llvmpipe
elseecho "No NEON/ASIMD support. Using Softpipe."export MESA_LOADER_DRIVER_OVERRIDE=softpipe
fi
四、LLVM 和 Softpipe 在 kms_swrast_dri 的不同
kms_swrast_dri.so
是 Mesa 的前端驱动,负责管理 OpenGL 或 Vulkan 的图形指令并输出到屏幕。它依赖后端渲染器(如 LLVMpipe 或 Softpipe)完成具体的渲染任务。以下是两种后端在kms_swrast_dri.so
中的主要差异:
4.1 性能表现
维度 | LLVMpipe 后端 | Softpipe 后端 |
---|---|---|
优化能力 | 支持 SIMD 指令(如 NEON/ASIMD,AVX、AVX2、AVX-512)和多线程优化 | 无 SIMD 和多线程支持,仅逐步解释渲染任务 |
渲染效率 | 高效,适合复杂任务和高分辨率渲染 | 效率低,复杂场景下性能显著下降 |
硬件依赖 | 利用现代 CPU 性能(多核和 SIMD 指令集) | 不依赖硬件性能,完全基于通用逻辑 |
4.2 渲染任务处理
LLVMpipe 在 kms_swrast_dri 中的渲染流程
- 接收指令:
- 从
kms_swrast_dri.so
接收图形指令,分配到多个线程。
- 从
- SIMD 优化:
- 批量处理像素或顶点,利用 SIMD 指令实现高效计算(如 AVX2 或 AVX-512)。
- 多线程并行:
- 将渲染任务分解到多个 CPU 核心,显著提升性能。
- 结果输出:
- 通过
kms_swrast_dri.so
输出渲染结果到显示设备。
- 通过
Softpipe 在 kms_swrast_dri 中的渲染流程
- 接收指令:
- 从
kms_swrast_dri.so
接收图形指令,逐步解释执行。
- 从
- 单线程处理:
- 所有渲染任务在单线程中按顺序执行,无并行或批量优化。
- 结果输出:
- 渲染完成后将结果通过
kms_swrast_dri.so
输出到显示设备。
- 渲染完成后将结果通过
4.3 应用场景
后端 | 适用场景 |
---|---|
LLVMpipe | 高性能 CPU 环境(如支持 NEON/SVE 指令集)。 |
无 GPU 硬件支持,但需要高分辨率渲染或复杂图形任务的场景。 | |
Softpipe | 调试、开发或功能验证场景,无需性能优化。 |
嵌入式系统或低资源设备,任务简单,图形性能要求低。 |
4.4 总结:LLVMpipe vs Softpipe in kms_swrast_dri
维度 | LLVMpipe 后端 | Softpipe 后端 |
---|---|---|
性能表现 | 高效,批量处理,支持多线程并行化 | 逐步解释渲染任务,性能较低 |
适用硬件 | 现代多核 CPU,支持 SIMD 指令集(如 NEON/SVE等) | 低性能硬件或单线程环境 |
适用场景 | 性能敏感的高负载任务(如无 GPU 的图形渲染) | 功能验证、调试开发或低负载简单任务 |
相关文章:
Mesa llvmpipe和softpipe对比
Mesa 后端性能分析:LLVM vs Software Pipe 当调试没有显卡的时候,可以使用cpu软件模拟的mesa-3d,后端采用kms_swrast_dri.so,发现管线使用llvmpipe的速度明显优于softpipe; 背景介绍 Mesa 是一个开源的图形库…...
【Spiffo】排障:VsCode报错“过程试图写入的管道不存在”(网络环境正常且地址正常的情况下依然出现)
摘要: VsCode使用remote-ssh报错nstall terminal quit with output: 过程试图写入的管道不存在,且输出类似下图的信息 一般来说这种情况更可能是网络环境出了问题,那连不上自不必多说,这里想讨论一种特殊情况。 有一种可能性&…...
Python图形界面(GUI)Tkinter笔记(二十一):Messagebox信息提示功能控件
messagebox 就像是 tkinter 库里的一个好帮手,它能帮你弹出各种各样的消息框给用户看。这些消息框可以告诉用户很多东西,比如提示、警告或者错误信息之类的。在 tkinter 库里,messagebox 这个模块有很多不同的函数,每个函数都能弹出一种特定的消息框。用这些函数,开发者可…...
KUKA机器人如何修改程序并下载到机器人控制器中?
KUKA机器人如何修改程序并下载到机器人控制器中? 如下图所示,首先将使用的网卡的IP地址设置为自动获得, 打开workvisual软件,点击搜索,正常情况下可以搜索到项目文件,选中后双击进入, 如下图所示,此时,workvisual会自动从机器人控制器中下载项目文件到电脑上,耐心等待…...
jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例
1. 各个组件如何新建的? 2. "http请求" 组件内容样例: "消息体数据" 源码: {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…...
「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能: 提醒时间输入与…...
前端开发【插件】moment 基本使用详解【日期】
moment.js 是一个非常流行的 JavaScript 库,用于处理和操作日期与时间。它提供了丰富的 API 来处理各种日期、时间和格式化的操作。尽管随着 Date API 的增强,moment.js 被视为“过时”,并且推荐使用 date-fns 或 luxon 等库来替代࿰…...
Apache Celeborn 在B站的生产实践
背景介绍 Shuffle 演进 随着B站业务的飞速发展,数据规模呈指数级增长,计算集群也逐步从单机房扩展到多机房部署模式。多个业务线依托大数据平台驱动核心业务,大数据系统的高效性与稳定性成为公司业务发展的重要基石。如图1,目前在大数据基础架构下,我们主要采用 Spark、Fl…...
imageio 图片转mp4 保存mp4
目录 安装: imageio 图片转mp4 numpy 保存mp4 安装: FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …...
【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 1. 选择结构基本概念 2. 主要语句类型(if、if-else、switch) 3. 跃迁函数中变量的取值范围 4. 计算阶跃函数的值 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:输入x的值&#x…...
基于 Solana Playground (pg模式)发行自定义参数的代币
文章目录 要做的事1、水龙头(devnet 环境)2、Solana Playground2.1、选择环境 3、基于 Solana Playground (pg模式)发行自定义参数的代币3.1、账户体系3.2、代码 4、浏览器& Phantom钱包 展示代币图片4.1、 浏览器和钱包展示的…...
代码随想录算法训练营第七十天 | 拓扑排序精讲,Dijkstra(朴素版)精讲,Dijkstra(堆优化版)精讲
拓扑排序精讲 题目讲解:代码随想录 重点: 给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。拓扑排序也是图论中判断有向无环图的常用方法。拓扑排序的过程,其实就两步: 找到入度为0的节点,加入结…...
基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
excel填充十六进制
excel填充十六进制 A10x000020x000130x000240x000350x000460x000570x000680x000790x0008100x0009110x000A120x000B130x000C140x000D150x000E160x000F 在A1表格中,输入:“0x”&DEC2HEX(ROW()-1,4) 然后进行下拉即可生成如表格显示十六进制...
scrapy 教程
Scrapy Tutorial In this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installation guide. We are going to scrape quotes.toscrape.com, a website that lists quotes from famous authors. This tutorial …...
IDE和IDEA详解和具体差异
1. IDE(集成开发环境)概述 1.1 什么是 IDE? IDE(Integrated Development Environment,集成开发环境)是一种为开发者提供全面编程工具的软件应用程序。它将代码编辑、编译、调试、版本控制等功能集成在一个统一的界面中,旨在提高开发效率,减少开发者在不同工具之间切换…...
使用MPTCP+BBR进行数据传输,让网络又快又稳
1.前言 在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输,并实现了传输速率的聚合。 实际应用中更推荐原生支持mptcp的应用,在MPTCP官网中可以看到如TCPDump、…...
【网络】网络基础知识(协议、mac、ip、套接字)
文章目录 1. 计算机网络的背景2. 认识网络协议2.1 协议分层2.2 OS与网络的关系 3. 网络传输基本流程3.1 局域网通信流程3.2 跨网络通信流程 4. Socket 编程预备4.1 理解源IP地址和目的IP地址4.2 端口号与Socket4.3传输层的典型代表4.4 网络字节序 5. socket 编程接口5.1 介绍5.…...
Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果
目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…...
游戏引擎学习第75天
仓库:https://gitee.com/mrxiao_com/2d_game_2 Blackboard: 处理楼梯通行 为了实现楼梯的平滑过渡和角色的移动控制,需要对楼梯区域的碰撞与玩家的运动方式进行优化。具体的处理方式和遇到的问题如下: 楼梯区域的过渡: 在三维空间中&#x…...
ModelScope ms-swift:轻量级模型微调框架
ModelScope ms-swift:轻量级模型微调框架 介绍支持的模型支持的技术使用方法为什么选择ms-swift?结论 介绍 ModelScope ms-swift是ModelScope社区提供的一个官方框架,用于大型语言模型(LLMs)和多模态大型模型…...
管理加密SQLite数据库的软件工具研究
使用软件工具管理加密的 SQLite 数据库是一个常见需求,尤其是当需要保护敏感数据时。以下是实现此目标的步骤和相关工具推荐: 1. 选择支持加密的 SQLite 版本 SQLite 默认并不支持加密功能。你需要使用以下方法之一来启用加密: SQLite Encry…...
react 封装一个类函数使用方法
1.编写ProductCount函数 class ProductCount {public static getProductCount(count: number): string {if (count < 10) {return 当前数量: 0${count};}return 当前数量: ${count};} }export default ProductCount;2.在代码文件中导入 ProductCount 类。 import ProductC…...
Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8
在 Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8 的步骤如下: ✅ 1. 检查 WSL 的安装 首先确保已经安装并启用了 WSL 2。 🔧 检查 WSL 版本 打开 PowerShell,执行以下命令: wsl --list --verbose确保 W…...
解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南
目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …...
jenkins入门4 --window执行execute shell
1、启动关闭jenkins 在Windows环境下,如果你需要关闭Jenkins服务,可以通过以下几种方式: 1、使用Windows服务管理器: 打开“运行”对话框(Win R),输入services.msc,然后回车。 在服…...
51c嵌入式~单片机~合集4
我自己的原文哦~ https://blog.51cto.com/whaosoft/12868932 一、时钟失效之后,STM32还能运行? 问题: 该问题由某客户提出,发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品的设计中,STM32 的 H…...
OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218
原因分析 通过OkHttp请求网络,结果请求下来的数据一直无法解析并且报错,因解析时String res response.body().toString() 将toString改为string即可!...
杰发科技——使用ATCLinkTool解除读保护
0. 原因 在jlink供电电压不稳定的情况下,概率性出现读保护问题,量产时候可以通过离线烧录工具避免。代码中开了读保护,但是没有通过can/uart/lin/gpio控制等方式进行关闭,导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…...
SQL 幂运算 — POW() and POWER()函数用法详解
POW() and POWER()函数用法详解 POW() 和 POWER() —计算幂运算(即一个数的指定次方)的函数。 这两个函数是等价的,功能完全相同,只是名字不同。 POW(base, exponent); POWER(base, exponent); base:底数。exponen…...
【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本
本文简述 经常使用docker部署SpringBoot 项目,因为自己的服务器小且项目简单,因此没有使用自动化部署。每次将jar包传到服务器后,需要手动构建,然后停止原有容器,并使用新的镜像启动,介于AI时代越来越懒的…...
【ArcGIS Pro二次开发实例教程】(2):BSM字段赋值
一、简介 一般的数据库要素或表格都有一个BSM字段,用来标识唯一值。 此工具要实现的功能是:按一定的规律(前缀中间的填充数字OBJECT码)来给BSM赋值。 主要技术要点包括: 1、ProWindow的创建,Label,Comb…...
VSCode函数调用关系图插件开发(d3-graphviz)
文章目录 1、如何在VSCode插件webview中用d3-graphviz绘图2、VSCode插件使用离线d3.min.js、d3-graphviz3、使用 `@hpcc-js/wasm` 包在 Node.js 环境直接转换dot为svg1、如何在VSCode插件webview中用d3-graphviz绘图 我来帮你创建一个 VS Code 插件示例,实现右键菜单触发 Web…...
OCR图片中文字识别(Tess4j)
文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库,它让 Java 项目更轻松地实现 OCR(光学字符识别)功能。 下载 tessdata 下载地址:https://github.com/tesseract-ocr/…...
leetcode 面试经典 150 题:同构字符串
链接同构字符串题序号205题型字符串解法哈希表难度简单熟练度✅✅✅✅ 题目 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#…...
算法-泰波那契
力扣题目链接:1137. 第 N 个泰波那契数 - 力扣(LeetCode) 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例 1&…...
Mac修改文件权限
查看文件权限 ll -all 修改读写权限 sudo chmod -R arwx /usr/local/mysql-5.7.30-macos10.14-x86_64/data/a_test 修改用户分组 sudo chown -R _mysql:wheel /usr/local/mysql-5.7.30-macos10.14-x86_64/data/b_test...
如何安装和配置PHP开发环境?
要安装和配置PHP开发环境,可以按照以下步骤进行: 一、下载和安装PHP 1:下载PHP: 访问PHP官方网站(PHP: Downloads),选择适合您操作系统的版本进行下载。 2:解压并安装PHP&#x…...
深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...
【Vim Masterclass 笔记07】S05L19:Vim 剪切、复制、粘贴操作同步练习
文章目录 S05L19 Vim 剪切、复制、粘贴操作同步练习(Exercise 05 - Cut, Copy and Paste)1 训练目标2 操作指令2.1 打开 dyp.txt 文件2.2 交换文件的头两行2.3 将文件首行 put 到文件其他为止2.4 练习在光标位置的上方粘贴文本行2.5 通过交换字符顺序更正…...
【前端下拉框】获取国家国旗
一、先看效果 二、代码实现(含国旗) <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
Elasticsearch 操作文档对数据的增删改查操作 索引库文档 操作数据 CRUD
介绍 在 Elasticsearch 中,文档的增、删、改、查操作是核心的基本功能。Elasticsearch 使用 RESTful API 提供这些操作,通常通过 HTTP 请求与 Elasticsearch 集群进行交互。 索引库 {"mappings": {"properties": {"title&qu…...
【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署入门 1. 软硬件条件…...
小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
数据结构大作业——家谱管理系统(超详细!完整代码!)
目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…...
【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…...
最新MySQL面试题(2025超详细版)
2025最新超详细MySQL面试题 文章目录 2025最新超详细MySQL面试题[toc]一、 SQL 和基本操作1. SQL的执行顺序2. 如何优化MySQL查询3. 常用的聚合函数4. 数据库事务5. 事务的四大特性(ACID)6. 视图7. MySQL中使用LIMIT子句进行分页8. MySQL中使用变量和用户定义的函数9. MySQL中的…...
Unity-Mirror网络框架-从入门到精通之AdditiveScenes 示例
文章目录 前言Additive Levels和Additive ScenesAdditive Levels场景介绍Portal传送门FadeInOut特效 Additive Scenes示例介绍ZoneHandlerSceneMassage 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框…...
java 转义 反斜杠 Unexpected internal error near index 1
代码: String str"a\\c"; //出现异常,Unexpected internal error near index 1 //System.out.println(str.replaceAll("\\", "c"));//以下三种都正确 System.out.println(str.replace(\\, c)); System.out.println(str.r…...
html内容过长,实现向上循环滑动效果
以下是几种实现 HTML 内容过长时向上循环滑动的常见方法,你可以根据具体需求和项目场景来选择合适的实现方式: 一、使用 CSS3 animation 实现简单的向上循环滑动(适用于简单的文本等内容滑动场景) 原理 通过 CSS3 的 keyframes…...