当前位置: 首页 > news >正文

现代图形API综合比较:Vulkan DirectX Metal WebGPU

Vulkan、DirectX、Metal 和 WebGPU 等低级图形 API 正在融合为类似于当前 GPU 构建方式的模型。 图形处理单元 (GPU) 是异步计算单元,可以处理大量数据,例如复杂的网格几何形状、图像纹理、输出帧缓冲区、变换矩阵或你想要计算的任何数据。

NSDT工具推荐:Three.js AI纹理开发包-YOLO合成数据生成器-GLTF/GLB在线编辑-3D模型格式在线转换-可编程3D场景编辑器-REVIT导出3D模型插件-3D模型语义搜索引擎-Three.js虚拟轴心开发包-3D模型在线减面-STL模型在线切割

GPU 并不总是这样,最初它们是一组基于固定硬件的功能,几乎没有可编程性。 随着应用程序突破了这些不可编程系统的功能极限,这种情况发生了变化,这保证了 GPU 制造商和应用程序开发人员之间的竞争不断突破其设计的极限 [Peddie 2023]。 帧缓冲区和光栅器 [Fatahalian 2018] 带来了可编程着色器、通用 GPU (GPGPU) 计算,以及最近添加的用于人工智能光线遍历加速和张量处理的硬件。 图形 API 伴随着这些变化而不断发展,增加了固定图形管道、计算着色器以及最近的光线遍历功能(DirectX 12 和 Vulkan 光线追踪)。

让我们看一下图形 API 之间的一些相似点和不同点。 我们将介绍以下 C++ API:

  • Vulcan
  • DirectX 12.x
  • DirectX 11.x
  • Metal
  • WebGPU
  • OpenGL

OpenGL的设计起源于计算机图形学的早期,被设计为状态机,因此它的接口与现代图形API有很大不同。 DirectX 11 虽然比 OpenGL 更接近现代 GPU 架构,但试图通过将 Vulkan、DirectX 12 和 Metal 目前让开发人员负责的任务委托给驱动程序来简化开发人员的工作。 [罗素 2014]

了解现代图形 API 的遗产是很有用的,因此它们会在相关的地方被提及。

1、执行顺序

无论 API 如何,图形应用程序通常都遵循以下执行顺序:

  1. 初始化 API - 创建访问 API 内部工作所需的核心数据结构。
  2. 加载资源 - 创建加载着色器等内容所需的数据结构、描述图形管道、创建和填充命令缓冲区以供 GPU 执行,以及将资源发送到 GPU 独占内存。
  3. 更新资源 - 将任何uniforms更新到着色器并在此处执行应用程序级逻辑。
  4. 呈现 - 将命令缓冲区列表发送到命令队列并呈现结果。
  5. 重复 2、3 和 4,直到应用程序发出关闭信号。
  6. 销毁 - 等待 GPU 完成所有剩余工作,并销毁所有数据结构和句柄。

因此,我们将按此顺序跟踪 Graphics API 数据结构的创建和使用。

2、导入依赖项

依赖关系示例

API

Structure

Vulkan

#include <vulkan/vulkan.hpp>

DirectX 12

#include <d3d12.h>

DirectX 11

#include <d3d11.h>

Metal

#import <Metal/Metal.h>

WebGPU

Requires Canary Browser with Flags

OpenGL

Varies by OS

启动新应用程序时,你需要包含对外部 API 的所有依赖项,图形 API 也不例外。 根据 API,你的项目中可能还需要其他库,例如着色器编译器。

OpenGL 是所有其他图形 API 的例外,因为根据操作系统和你的个人设置,可以从不同位置进行多种导入。

3、着色器编译器

API

Structure

Vulkan

#include “glslang/Include/revision.h”

DirectX 12

#include <D3Dcompiler.h>

DirectX 11

#include <D3Dcompiler.h>

Metal

#import <Metal/Metal.h>

WebGPU

N/A

OpenGL

void glShaderSource(…)

Vulkan 要求你使用生成 SPIR-V 的外部着色器编译器,例如 glslang 或 DirectX Shader Compiler。

对于 DirectX,建议你使用 DirectX 着色器编译器而不是附带的编译器,因为它支持更新的着色器模型版本以及更多优化和速度。

金属着色器可以在运行时编译,也可以在构建时使用 MacOS 路径中包含的 metallib 命令行工具进行编译。

OpenGL 不需要外部库来编译着色器,因为它包含在库中,但它也支持 SPIR-V 作为 OpenGL 4.6 中 GLSL 的可选替代方案。

WebGPU 着色器是纯文本字符串,因此无需编译它们,尽管在生产中去除空格和缩小/损坏符号是个好主意。

4、初始化API

  • 入口API

API

Structure

Vulkan

vk::Instance

DirectX 12

IDXGIFactory4

DirectX 11

IDXGIFactory

Metal

CAMetalLayer

WebGPU

GPU

OpenGL

Varies by OS

图形 API 的入口点通常允许你访问 API 的内部类。

Vulkan 的入口点涉及选择你打算使用的 API 版本以及您想要的任何扩展或层,例如错误检查、窗口表面等。

DirectX 11 和 12 要求您创建一个工厂,以及一个可选的调试数据结构。

在 Metal 上,NSWindow 需要有一个带有 CAMetalLayer 的 NSView(它是 QuartzCore 的一部分)。 一旦层存在并附加到窗口,该窗口就可以使用 Metal API 的其余部分。

对于 OpenGL,最接近入口点的是操作系统特定的上下文,你可以在创建操作系统窗口后请求该上下文。

  • 物理设备

API

Structure

Vulkan

vk::PhysicalDevice

DirectX 12

IDXGIAdapter1

DirectX 11

IDXGIAdapter

Metal

MTLDevice

WebGPU

GPUAdapter

OpenGL

glGetString(GL_VENDOR)

物理设备允许你查询重要的设备特定详细信息,例如内存大小和功能支持。

金属是这里唯一的异常值,因为物理和逻辑设备都由相同的数据结构共享。

OpenGL 无法查询任何设备详细信息,除非使用制造商专有的扩展。 你可以获得一些杂项数据,例如驱动程序供应商名称、渲染器和 OpenGL 版本。

  • 逻辑设备

API

Structure

Vulkan

vk::Device

DirectX 12

ID3D12Device

DirectX 11

ID3D11Device

Metal

MTLDevice

WebGPU

GPUDevice

OpenGL

N/A

设备使你可以访问 API 的核心内部功能,例如创建纹理、缓冲区、队列、管道等图形数据结构。这种类型的数据结构在所有现代图形 API 中大部分都是相同的,并且具有非常丰富的功能。 他们之间几乎没有什么变化。

Vulkan 和 DirectX 12 通过设备创建内存数据结构来提供对内存的控制。

  • 队列

API

Structure

Vulkan

vk::Queue

DirectX 12

ID3D12CommandQueue

DirectX 11

ID3D11DeviceContext

Metal

MTLCommandQueue

WebGPU

GPUQueue

OpenGL

N/A

队列允许你将任务排入队列以供 GPU 执行。 GPU 是一种异步计算设备,因此这里的想法是始终保持忙碌状态,同时控制何时将项目添加到队列中。

Vulkan 队列要求你在创建设备之前指定设备将使用哪些队列。

  • 命令池

API

Structure

Vulkan

vk::CommandPool

DirectX 12

ID3D12CommandAllocator

DirectX 11

ID3D11DeviceContext

Metal

MTLCommandQueue

WebGPU

GPUDevice

OpenGL

N/A

命令池是一种允许你创建命令缓冲区的数据结构。

Metal 的突出之处在于队列也是分配命令缓冲区的数据结构。

5、帧后台API

  • 窗口表面

API

Structure

Vulkan

vk::Surface

DirectX 12

ID3D12Resource

DirectX 11

ID3D11Texture2D

Metal

CAMetalLayer

WebGPU

GPUCanvasContext

OpenGL

Varies by OS

窗口表面API允许你将所有绘制调用绑定到操作系统特定的窗口。

在 DirectX 上,由于只有 Windows / Xbox 作为 API 的目标,因此最接近表面的是从交换链接收的纹理后台缓冲区。 交换链接收您的窗口句柄,并从那里创建 DirectX 驱动程序内部的表面。

由于 MacOS 和 iOS 窗口具有分层结构,其中应用程序包含视图,视图可以包含层,因此 Metal 中最接近表面的东西要么是金属层,要么是包裹它的视图。

  • 交换链

API

Structure

Vulkan

vk::Swapchain

DirectX 12

IDXGISwapChain3

DirectX 11

IDXGISwapChain

Metal

CAMetalDrawable

WebGPU

GPUCanvasContext

OpenGL

Varies by OS

交换链在给定窗口的不同后台缓冲区之间翻转,并控制渲染的各个方面,例如刷新率和后台缓冲区交换行为。

Metal 和 OpenGL 在这里脱颖而出,因为 API 缺乏交换链的概念,而是将其留给操作系统窗口 API。

  • 帧缓冲区

API

Structure

Vulkan

vk::Framebuffer

DirectX 12

ID3D12Resource

DirectX 11

ID3D11RenderTargetView

Metal

MTLRenderPassDescriptor

WebGPU

GPURenderPassDescriptor

OpenGL

GLuint

帧缓冲区是在基于光栅的图形管道执行期间用作输出的输出纹理组。

DirectX 12 和 11 没有为此提供显式数据结构,而是你可以传递一组视图。

6、初始化资源

  • 纹理

API

Structure

Vulkan

vk::Image & vk::ImageView

DirectX 12

ID3D12Resource

DirectX 11

ID3D11Texture2D

Metal

MTLTexture

WebGPU

GPUTexture & GPUTextureView

OpenGL

GLuint

纹理是存储颜色信息的数据数组,并用作渲染的输入/输出。 Vulkan、DirectX 12 和 WebGPU 引入了对给定纹理拥有多个视图的想法,这些视图可以以不同的编码格式或颜色空间查看该纹理。 Vulkan 引入了图像和缓冲区的托管内存的概念,因此纹理是图像、使用时的图像视图(可以有多个)以及仅设备中或 CPU-GPU 可访问空间中的内存的三元组。

对于 Vulkan 中管理内存的更传统方式,我强烈推荐 AMD Vulkan 内存分配器。 对于 DirectX 12,同一作者发布了 AMD D3D12 内存分配器。

  • 缓冲区

API

Structure

Vulkan

vk::Buffer & vk::BufferView

DirectX 12

ID3D12Resource

DirectX 11

ID3D11Buffer

Metal

MTLBuffer

WebGPU

GPUBuffer & GPUBufferView

OpenGL

GLuint

缓冲区是一个数据数组,例如网格的位置数据、颜色数据、索引数据等。类似的图像规则也适用于 Vulkan 和 WebGPU 中的缓冲区。

  • 着色器

API

Structure

Vulkan

vk::ShaderModule

DirectX 12

ID3DBlob

DirectX 11

ID3D11VertexShader or ID3D11PixelShader

Metal

MTLLibrary

WebGPU

GPUShaderModule

OpenGL

GLuint

着色器往往是已编译的着色器(HLSL、GLSL、MSL 等)代码块的句柄,该代码将馈送到给定的管道。

  • 着色器绑定

API

Structure

Vulkan

vk::PipelineLayout & vk::DescriptorSet

DirectX 12

ID3D12RootSignature

DirectX 11

ID3D11DeviceContext::VSSetConstantBuffers(…)

Metal

[MTLRenderCommandEncoder setVertexBuffer: uniformBuffer]

WebGPU

GPUPipelineLayout

OpenGL

GLint

大多数现代图形 API 都具有绑定数据结构,以帮助将统一的缓冲区和纹理连接到需要该数据的图形管道。 Metal 的独特之处在于,您可以在命令编码器中使用 setVertexBuffer 绑定制服,与 Vulkan、DirectX 12 和 WebGPU 相比,它的架构变得更加容易。

  • 流水线

API

Structure

Vulkan

vk::Pipeline

DirectX 12

ID3D12PipelineState

DirectX 11

Various State Calls

Metal

MTLRenderPipelineState

WebGPU

GPURenderPipeline

OpenGL

Various State Calls

管道是对执行光栅绘制调用、计算调度或光线跟踪调度时将执行的内容的总体描述。

DirectX 11 和 OpenGL 在这里是独一无二的,它们没有用于图形管道的专用对象,而是使用调用在执行绘制调用之间设置管道状态。

  • 命令缓冲区

API

Structure

Vulkan

vk::CommandBuffer

DirectX 12

ID3D12GraphicsCommandList

DirectX 11

ID3D11DeviceContext

Metal

MTLRenderCommandEncoder

WebGPU

GPUCommandEncoder

OpenGL

Intenal to Driver or with GL_NV_command_list

命令缓冲区是一个异步计算单元,你可以在其中描述 GPU 执行的过程,例如绘制调用、将数据从 CPU-GPU 可访问内存复制到 GPU 独占内存,以及动态设置图形管道的各个方面,例如当前剪刀。

以前,你会声明希望 GPU 按程序执行什么,并且 GPU 会执行这些任务,但 GPU 本质上是异步的,因此驱动程序将负责确定何时将任务调度到 GPU。

  • 命令列表

API

Structure

Vulkan

vk::SubmitInfo

DirectX 12

ID3D12CommandList[]

DirectX 11

ID3D11CommandList

Metal

MTLCommandBuffer

WebGPU

GPUCommandEncoder[]

OpenGL

Intenal to Driver or with GL_NV_command_list

命令列表是批量推送到 GPU 的命令缓冲区组。 这样做的原因是为了保持 GPU 持续忙碌,从而减少 CPU 和 GPU 之间的不同步 [Foley 2015]。

  • 围栏

API

Structure

Vulkan

vk::Fence

DirectX 12

ID3D12Fence

DirectX 11

ID3D11Fence

Metal

MTLFence

WebGPU

N/A

OpenGL

glFenceSync

Fence 是用于同步 CPU 和 GPU 的对象。 CPU 和 GPU 都可以被指示在栅栏处等待,以便对方能够赶上。 这可用于管理资源分配和释放,从而更轻松地管理总体图形内存使用情况。 [萨特兰等人。 2018]

  • 栅栏

API

Structure

Vulkan

vkCmdPipelineBarrier

DirectX 12

D3D12_RESOURCE_BARRIER

DirectX 11

N/A

Metal

MTLFence

WebGPU

N/A

OpenGL

glMemoryBarrier

命令缓冲区内更细粒度的同步形式。 Hans-Kristian Arntzen 写了一篇关于 Vulkan 同步的文章,值得一看。

  • 信号量

API

Structure

Vulkan

vk::Semaphore

DirectX 12

HANDLE

DirectX 11

HANDLE

Metal

dispatch_semaphore_t

WebGPU

N/A

OpenGL

Varies by OS

信号量是用于引入操作之间的依赖关系的对象,例如在将命令缓冲区提交到设备队列之前获取交换链中的下一个图像之前等待。

Vulkan 的独特之处在于信号量是 API 的一部分,而 DirectX 和 Metal 将其委托给操作系统调用。

7、空间、对齐

每个图形 API 可以有不同的轴方向、NDC 坐标方向、矩阵对齐、纹理对齐等默认值,在大多数情况下,这不是什么大问题,只需在你的片段着色器中翻转 UV 中的 y 值即可。

  • 纹理对齐

API

Structure

Vulkan

Bottom Left

DirectX 12

Top Left

DirectX 11

Top Left

Metal

Top Left

WebGPU

Bottom Left

OpenGL

Bottom Left

DirectX 使用左上角作为像素空间坐标,大多数闭源 API 也是如此,而开源则选择使用左下角。

8、结束语

虽然这些 API 中的每一个都有细微的差别,但它们在设计上非常接近。 由库架构师决定他们所需的 API 限制在哪里,无论是像 Metal/WebGPU 一样简洁,还是像 Vulkan 一样复杂。


原文链接:现代图形API综合比较 - BimAnt

相关文章:

现代图形API综合比较:Vulkan DirectX Metal WebGPU

Vulkan、DirectX、Metal 和 WebGPU 等低级图形 API 正在融合为类似于当前 GPU 构建方式的模型。 图形处理单元 (GPU) 是异步计算单元&#xff0c;可以处理大量数据&#xff0c;例如复杂的网格几何形状、图像纹理、输出帧缓冲区、变换矩阵或你想要计算的任何数据。 NSDT工具推荐…...

【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)

LeetCode Hot 100 是最常被考察的题目集合&#xff0c;涵盖了面试中常见的算法和数据结构问题。刷 Hot100可以让你在有限的时间内集中精力解决最常考的问题。鼓励大家不仅要写出代码&#xff0c;最好理解问题的本质、优化解法和复杂度分析。遇到问题要多交流多求问多分享&#…...

用VBA将word文档处理成支持弹出式注释的epub文档可用的html内容

有一种epub文件&#xff0c;其中的注释以弹窗形式显示&#xff0c;如下图&#xff1a; 点击注释引用后&#xff0c;对应的注释内容会弹出在页面中显示&#xff0c;再次点击弹窗外的任意位置该弹窗即关闭&#xff0c;关闭后点击任意注释引用&#xff0c;对应的注释内容会弹窗显示…...

舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino

目录 1.舵机简介 2.舵机转动角度的PWM条件(以180度的SG90舵机为例) 2.1 控制关系 2.2arduino产生PWM 3.0 附代码 循环0度到180度开关舵机(非阻塞版本) 4.0 Servo.h 舵机代码 1.舵机简介 舵机也叫伺服电机,是控制输入PWM信号来精确控制转动角度.所以想要驱动舵机就是让ard…...

Oracle Database 23ai 中的DBMS_HCHECK

在 Oracle 23ai 中&#xff0c;DBMS_HCHECK 包允许我们检查数据库中已知的数据字典问题。 几年前&#xff0c;Oracle 发布了 hcheck.sql 脚本&#xff08;文档 ID 136697.1&#xff09;来检查数据库中已知的数据字典问题。 DBMS_HCHECK 包意味着我们不再需要下载 hcheck.sql…...

如何利用AWS监听存储桶并上传到tg bot

业务描述&#xff1a; 需要监听aws的存储中的最新消息&#xff0c;发送新的消息推送到指定tg的频道。 主要流程&#xff1a; 1.上传消息到s3存储桶&#xff08;不做具体描述&#xff09; 2.通过aws的lambda监听s3存储桶的最新消息&#xff08;txt文件&#xff09; 3.将txt文件…...

STM32 SPI读取SD卡

七个响应类型&#xff1a; R1 Response (Normal Response): R1响应是最基本的响应&#xff0c;包含一个字节的状态位&#xff0c;用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…...

TANGO与LabVIEW控制系统集成

TANGO 是一个开源的设备控制和数据采集框架&#xff0c;主要用于管理实验室设备、自动化系统和工业设备。它为不同类型的硬件提供统一的控制接口&#xff0c;并支持设备之间的通信&#xff0c;广泛应用于粒子加速器、同步辐射光源、实验室自动化和工业控制等领域。 1. TANGO的核…...

eth_type_trans 函数

eth_type_trans 是 Linux 内核网络子系统中的一个函数,它主要用于确定接收到的以太网数据包(Ethernet frame)的协议类型,并设置相应的 sk_buff 结构体的协议字段。以下是关于 eth_type_trans 的详细解释: 功能 eth_type_trans 函数的主要功能是根据以太网数据包的目的 M…...

派克汉尼汾推出新的快换接头产品系列,扩展热管理解决方案

近期&#xff0c;运动与控制技术领域的先行者——派克汉尼汾宣布推出四个具有开创性的热管理解决方案——NSAC、NSEC和NSIC系列盲插式快换接头以及NSSC螺纹连接快换接头。这些创新产品旨在满足电子冷却、电池制造、信息技术、能源管理、工程机械和运输等行业复杂的热管理需求。…...

uniapp 前端解决精度丢失的问题 (后端返回分布式id)

原因&#xff1a; 后端使用分布式id, id为19位数&#xff0c;导致精度丢失 &#xff0c;前端解决方法 这个是通过浏览器请求回来的数据&#xff0c;这个时候id 数据已经丢失了&#xff0c;在数据库查询不到&#xff0c;在调获详情接口的时候会有问题 实际的&#xff1a; 解决…...

C语言:指针4(常量指针和指针常量及动态内存分配)

常量指针与指针常量 常量&#xff1a;分为字面量和只读常量&#xff0c;字面量就是我们平时直接操作的量&#xff1a; printf("%d\n",12);/printf("%s\n","hello");只读常量使用关键字 const 修饰&#xff0c;凡是被这个关键字修饰 的变量&…...

Win11提示fveapi.dll丢失是什么原因?fveapi.dll丢失怎么办?

一、fveapi.dll丢失的成因与影响 成因&#xff1a; 系统更新不完整&#xff1a;Win11系统在更新过程中&#xff0c;如果某个环节出现问题&#xff0c;可能会导致fveapi.dll等系统文件未能正确更新或安装。软件冲突&#xff1a;某些第三方软件可能与系统文件发生冲突&#xff…...

台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)

以下是开发台球助教系统客户端&#xff08;APP&#xff0c;小程序&#xff0c;H5&#xff09;几端的信息收藏功能的详细需求和功能说明&#xff0c;内容比较详细&#xff0c;可以说是一个教科书式的详细说明了&#xff0c;这套需求说明不仅仅用在我们的台球助教系统程序上&…...

如何设计 Vue 3 组件库:高效的组件化开发方法

如何设计 Vue 3 组件库&#xff1a;高效的组件化开发方法 &#x1f4d6; 前言 随着前端技术的不断发展&#xff0c;Vue.js 已成为现代化 Web 应用开发的主流框架之一。Vue 3 引入了诸多改进&#xff0c;尤其是组合式 API&#xff0c;使得 Vue 在开发大型项目时&#xff0c;能够…...

第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】

摘要&#xff1a;前面章节主要介绍单个电机控制&#xff0c;本节内容介绍两个电机完成直线插补运动 一、 Bresenham直线算法介绍 Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发&#xff0c;最初用于计算机显示直线&#xff0c;它确定应该选择的n维光栅的点&#…...

一个从oracle使用spool导出数据到kadb的脚本

1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...

【STM32】GPIO口以及EXTI外部中断

个人主页~ 有关结构体的知识在这~ 有关枚举的知识在这~ GPIO口以及EXTI外部中断 GPIO一、简介二、基本结构三、输入输出模式1、输入模式&#xff08;1&#xff09;上拉输入&#xff08;2&#xff09;下拉输入&#xff08;3&#xff09;浮空输入&#xff08;4&#xff09;模拟输…...

Confluent Cloud Kafka 可观测性最佳实践

Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务&#xff0c;提供高可用性和可扩展性&#xff0c;旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群&#xff0c;而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…...

【LeetCode每日一题】——415.字符串相加

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验

2024年初&#xff0c;人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目&#xff08;一款融合大型语言模型能力的云端AI编程IDE&#xff09;时&#xff0c;技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力&#xff0c;TRAE在WayToAGI等…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

Python爬虫(四):PyQuery 框架

PyQuery 框架详解与对比 BeautifulSoup 第一部分&#xff1a;PyQuery 框架介绍 1. PyQuery 是什么&#xff1f; PyQuery 是一个 Python 的 HTML/XML 解析库&#xff0c;它采用了 jQuery 的语法风格&#xff0c;让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...