SGLang实战:从KV缓存复用到底层优化,解锁大模型高效推理的全栈方案
在当今快速发展的人工智能领域,大型语言模型(LLM)的应用已从简单对话扩展到需要复杂逻辑控制、多轮交互和结构化输出的高级任务。面对这一趋势,如何高效地微调并部署这些大模型成为开发者面临的核心挑战。本文将深入探讨SGLang——这一专为大模型设计的高效推理引擎与结构化生成语言,揭示它如何通过软硬件协同设计理念,从后端运行时系统到前端编程语言进行全面优化,为开发者提供更快速、更可控的大模型微调与部署体验。
一、SGLang的核心价值与设计理念
SGLang(Structured Generation Language)是由LMSYS Org发起的一个开源项目,旨在解决大模型应用中的两大关键挑战:编程复杂性和执行效率低下 。传统的大模型微调与部署过程中,开发者常常需要面对繁琐的字符串操作、脆弱的输出解析、冗余的计算和内存使用等问题。SGLang通过创新的系统架构设计,将前端语言与后端运行时紧密结合,为这些痛点提供了系统级的解决方案。
SGLang的设计理念基于三个核心原则
软硬件协同设计:后端运行时与前端语言共同优化,实现1+1>2的效果。
自动化优化:通过RadixAttention等技术自动处理KV缓存复用等复杂问题,减少人工干预。
结构化控制:提供丰富的原语和DSL,使复杂控制流和结构化输出变得简单直观
与传统的微调框架相比,SGLang不仅关注模型本身的微调过程,更注重微调后的高效部署和实际应用性能。这种端到端的优化思路使得基于SGLang微调的模型能够充分发挥其潜力,尤其是在高并发、低延迟的生产环境中 。
二、SGLang的技术架构解析
革命性的后端运行时优化
SGLang的后端运行时系统包含多项突破性技术,使其在性能上显著超越vLLM、TensorRT-LLM等传统推理引擎。根据官方测试数据,SGLang在Llama-70B上的吞吐量可达vLLM的3.1倍 ,在某些场景下甚至高达5倍 。这一惊人性能源于以下几项关键技术:
1.RadixAttention:自动KV缓存复用技术
在LLM生成文本时,需要维护一个KV缓存(Key-Value Cache)来存储之前生成token的中间计算结果。SGLang提出的RadixAttention技术通过基数树(Radix Tree)数据结构管理KV缓存,实现了跨多个生成调用的自动复用 。基数树的每个节点代表一个token序列,边代表token。当新请求到来时,RadixAttention会在树中进行前缀匹配,找到最长共享前缀节点并复用其KV缓存 。
这种方法相比传统手动管理KV缓存的方式具有三大优势 :
自动化:无需手动配置,自动识别和复用KV缓存
高效性:基数树结构和LRU缓存策略保证了高效管理
通用性:兼容连续批处理、分页注意力等现有技术
在实际应用中,RadixAttention可处理多种KV缓存复用模式,包括小样本学习示例、自洽问题、多轮对话历史等 。据测试,采用RadixAttention后,缓存命中率可达50%-99%,平均接近最佳命中率的96% 。
2.零开销批处理调度器
SGLang的批处理调度器采用了创新的"CPU调度与GPU计算重叠"设计。调度器提前一批运行,在GPU执行当前任务的同时,同步准备好下一批所需的所有元数据。这种设计使得GPU始终处于忙碌状态,无需等待CPU的调度结果,成功隐藏了诸如匹配radix cache等昂贵操作的开销。
测试表明,在连续五个解码批次中,采用这种设计的GPU能够全程保持高负载,未出现任何空闲时段 。这一优化尤其在小模型和大规模张量并行场景下效果显著,使得SGLang v0.4能够充分挖掘GPU的计算潜力,在batch size显著增加的情况下仍保持高性能。
3.快速结构化输出解码
针对JSON等结构化输出的解码需求,SGLang提出了压缩有限状态机技术 。与传统系统一次只能解码一个标记不同,SGLang会分析约束条件并构建压缩有限状态机来表示它们,尽可能将多标记路径压缩为单步路径,从而可以一次解码多个标记。实测显示,这种方法使SGLang在JSON解码任务上比其他方案快达10倍 。
强大的前端DSL语言
SGLang的前端是一种嵌入在Python中的领域特定语言(DSL),它极大地简化了复杂LM程序的开发 。通过提供生成(如extend、gen、select)和并行控制(如fork、join)的原语,SGLang使开发者能够轻松实现高级提示技术、控制流、多模态输入和外部交互。
三、SGLang在大模型微调中的应用实践
SGLang虽然主要作为推理引擎,但其高效的设计理念同样适用于大模型微调的各个环节。结合LLama-factory等微调框架,开发者可以构建完整的SGLang微调工作流 :
模型选择与下载:从Hugging Face或ModelScope获取基础模型,如Qwen2.5-7B-Instruct。
数据准备:构建符合Alpaca或ShareGPT格式的数据集,确保包含清晰的instruction-input-output结构
微调执行:使用LoRA等高效微调方法,在消费级GPU上完成适配
模型验证:通过evaluate&predict功能测试微调效果
部署优化:利用SGLang Runtime进行高效部署,充分发挥微调后模型的潜力
四、典型应用场景
基于SGLang微调的大模型特别适合以下场景 :
企业级高并发推理服务:如智能客服、内容审核等需要同时处理大量请求的场景。
复杂逻辑的代理应用:需要多轮规划、推理和外部交互的智能代理。
结构化输出需求:如JSON数据生成、数据库查询等需要严格输出格式的场景。
多模态处理:结合图像、视频等多模态输入的复杂应用。
五、SGLang的部署与优化指南
1.环境配置与安装
部署SGLang需要准备以下环境 :
Linux系统(目前仅支持Linux)
NVIDIA GPU(A100/H100等高性能显卡推荐)
Python 3.8及以上版本
CUDA 11.8或更高版本
2.安装命令示例:
pip install "sglang[all]"#安装FlashInfer CUDA内核(可选,提升性能)
wget "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/flashinfer-0.1.2%2Bcu121torch2.3-cp310-cp310-linux_x86_64.whl"pip install flashinfer-0.1.2+cu121torch2.3-cp310-cp310-linux_x86_64.whl
3.模型部署
部署模型的基本命令格式为 :
python -m sglang.launch_server \--model-path ./gte-Qwen2-7B-instruct \--is-embedding \ # 如果是嵌入模型--host 0.0.0.0 \--port 8080 \--mem-fraction-static 0.7 # 控制显存占用比例
python -m sglang.launch_server \--model-path /Qwen2-7B-Instruct \--port 30000 \--dtype bfloat16 \--disable-cuda-graph \--context-length 512
4.请求调用
SGLang支持两种主要的调用方式:
cURL方式:
curl http://localhost:30000/generate \-H "Content-Type: application/json" \-d '{"text": "Once upon a time,","sampling_params": {"max_new_tokens": 16,"temperature": 0}}'
OpenAI兼容API方式:
import openai
client = openai.Client(base_url="http://127.0.0.1:30000/v1", api_key="EMPTY")response = client.chat.completions.create(model="default",messages=[{"role": "system", "content": "You are a helpful AI assistant"},{"role": "user", "content": "以杭州的春天为题,写一篇100字的短文"},],temperature=0,max_tokens=150,
)
print(response)
六、性能优化建议
为了充分发挥SGLang的性能潜力,开发者可以考虑以下优化策略 :
合理设置批处理大小:根据GPU内存容量和模型大小,找到最优的batch size
启用CUDA Graph:在显存充足的情况下启用CUDA Graph以减少内核启动开销
使用FP8/BF16精度:在支持的新硬件上使用低精度计算提升吞吐量
配置合适的上下文长度:根据实际需求设置context-length,避免不必要的显存浪费
利用RadixAttention:设计prompt时考虑复用可能性,最大化缓存命中率
相关文章:
SGLang实战:从KV缓存复用到底层优化,解锁大模型高效推理的全栈方案
在当今快速发展的人工智能领域,大型语言模型(LLM)的应用已从简单对话扩展到需要复杂逻辑控制、多轮交互和结构化输出的高级任务。面对这一趋势,如何高效地微调并部署这些大模型成为开发者面临的核心挑战。本文将深入探讨SGLang——这一专为大模型设计的高…...
【中大厂面试题】腾讯 后端 校招 最新面试题
操作系统 进程和线程的区别 本质区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销&am…...
数据结构第六章(一) -图
数据结构第六章(一) 图一、图的基本概念1.图的分类、度、权等2.路径、回路、连通等3.连通分量、生成树等 二、几种特殊的图1.完全图2.稠密图、稀疏图3.树、有向树 三、常见考点总结 图 一、图的基本概念 感觉要想怎么定义图,图就是顶点和边组…...
【技术白皮书】外功心法 | 第三部分 | 数据结构与算法基础(常用的数据结构)
数据结构与算法基础 什么是算法?算法效率查询和排序为什么排序如此重要?思考问题如何确定复杂性数据结构连续或链接的数据结构链表的优点数组的优点数组集合Set 声明的一些方法有Multiset多元集合栈和队列何时使用栈和队列数据字典字典Hash的实现时间复杂度对时间的影响什么是…...
spark简介和安装
spark概念 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎 spark核心模块 Spark Core Spark Core 中提供了 Spark 最基础与最核心的功能,Spark 其他的功能如:Spark SQL,Spark Streaming,GraphX, MLlib 都是在 …...
如何在 CentOS 7 系统上以容器方式部署 GitLab,使用 ZeroNews 通过互联网访问 GitLab 私有仓库,进行代码版本发布与更新
第 1 步: 部署 GitLab 容器 在开始部署 GitLab 容器之前,您需要创建本地目录来存储 GitLab 数据、配置和日志: #创建本地目录 mkdir -p /opt/docker/gitlab/data mkdir -p /opt/docker/gitlab/config mkdir -p /opt/docker/gitlab/log#gi…...
springboot Filter实现请求响应全链路拦截!完整日志监控方案
一、为什么你需要这个过滤器? 日志痛点: 🚨 请求参数散落在各处? 🚨 响应数据无法统一记录? 🚨 日志与业务代码严重耦合? 解决方案: 一个Filter同时拦截请…...
spring mvc 在拦截器、控制器和视图中获取和使用国际化区域信息的完整示例
在拦截器、控制器和视图中获取和使用国际化区域信息的完整示例 1. 核心组件代码示例 1.1 配置类(Spring Boot) import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.spring…...
docker部署jenkins并成功自动化部署微服务
一、环境版本清单: docker 26.1.4JDK 17.0.28Mysql 8.0.27Redis 6.0.5nacos 2.5.1maven 3.8.8jenkins 2.492.2 二、服务架构:有gateway,archives,system这三个服务 三、部署步骤 四、安装linux 五、在linux上安装redis&#…...
android 14.0 工厂模式 测试音频的一些问题(高通)
1之前用tinycap,现在得用agmcap 执行----agmcap /data/test.wav -D 100 -d 101 -i CODEC_DMA-LPAIF_RXTX-TX-3 -T 3 报错1 agmcap data/test.wav -D 100 -d 101 -i CODEC_DMA-LPAIF_RXTX-TX-3 -T 3 Failed to open xml file name /vendor/etc/backend_co…...
vue:前端预览 / chrome浏览器设置 / <iframe> 方法预览 doc、pdf / vue-pdf 预览pdf
一、本文目标 <iframe> 方法预览 pdf 、word vue-pdf 预览pdf 二、<iframe> 方法 2.1、iframe 方法预览需要 浏览器 设置为: chrome:设置-隐私设置和安全性-网站设置-更多内容设置-PDF文档 浏览器访问: chrome://settings/co…...
Axure疑难杂症:详解横向菜单左右拖动效果及阈值说明
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:横向菜单左右拖动 主要内容:菜单设计、拖动效果、阈值设计 应用场景:APP横向菜单栏、台账菜单栏、功能选择栏等 案例展示: 案例视频: 横向菜单左右拖动效果 正文内容: 最近很多粉丝私信我,横向…...
多视图几何--立体校正--Bouguet方法
Bouguet算法的数学原理详解 Bouguet算法的核心目标是实现双目相机的极线校正,使左右图像的对应点位于同一水平线上,从而简化立体匹配。其数学原理围绕旋转矩阵分解、极线约束构造和重投影优化展开,以下是分步推导: 一、坐标系定义…...
debian12 mysql完全卸载
MySQL 的数据目录通常是 /var/lib/mysql,配置文件通常在 /etc/mysql 目录下。使用以下命令删除这些目录: sudo rm -rf /var/lib/mysql sudo rm -rf /etc/mysql清理残留文件 sudo find / -name "mysql*" -exec rm -rf {} \; 2>/dev/null验…...
随机动作指令活体检测技术的广泛应用,为人脸识别安全保驾护航
随着人脸识别技术在金融支付、门禁系统、手机解锁等领域的广泛应用,攻击手段也日益多样化,如照片、视频回放、3D面具等伪造方式对系统安全构成严重威胁。传统的人脸识别技术难以区分真实人脸与伪造攻击,正是在这样的背景下,随机动…...
Chrome 135 版本开发者工具(DevTools)更新内容
Chrome 135 版本开发者工具(DevTools)更新内容 一、性能(Performance)面板改进 1. 性能面板中的配置文件和函数调用现已显示来源和脚本链接 Performance > Summary(性能 > 概览)选项卡现在会显示配…...
《算法:以三种算法思想及两种优化策略解决Fibonacci数》
文章目录 0.题目:red_circle:一.递归记忆化搜索**a.普通递归****b.记忆化搜索(优化)**算法讲解: :red_circle:二.前缀和a.算法讲解b.代码示例 :red_circle:三.动态规划滚动数组a.算法讲解b.普通动规代码示例c.滚动数组优化 作者的个人gitee 作者的算法讲…...
定制开发开源AI智能名片S2B2C商城小程序源码中的产品运营协同进化机制研究
摘要 在数字化产品发展进程中,产品经理与运营人员的协同工作机制对产品迭代方向具有决定性作用。本文以定制开发开源AI智能名片S2B2C商城小程序源码为研究对象,通过分析其技术架构中的智能推荐系统、三级账户体系及社交裂变引擎等创新模块,揭…...
Colmap的安装和使用
Colmap 网站: https://colmap.github.io/GitHub: https://github.com/colmap/colmap 安装 Windows 从 GitHub发布页 GitHub Releases 下载预编译的二进制, 区分带CUDA和不带CUDA的版本. Ubuntu 在 Ubuntu 22.04 下可以通过apt install colmap安装, 但是这样安装的是不带C…...
Springboot框架—单元测试操作
Springboot单元测试的操作步骤: 1.添加依赖spring-boot-starter-test 在pom.xml中添加依赖spring-boot-starter-test 2.在src/test/java下新建java class 3.单元测试入口代码结构 import org.junit.Test; import org.junit.runner.RunWith; import org.springfra…...
Elasticearch数据流向
Elasticearch数据流向 数据流向图 --- config: layout: elk look: classic theme: mc --- flowchart LR subgraph s1["图例"] direction TB W["写入流程"] R["读取流程"] end A["Logstash Pipeline"] -- 写入请求 --> B["Elas…...
dB,dBi, dBd, dBc,dBm,dBw释义及区别
贝尔(B) 贝尔(B)最初用于表示音量功率10与1的比值,亚历山大.格拉汉姆.贝尔的名字命名。因此,1B表示功率比10:1,这是一种对数的关系,底数为10,100:12B,1000:13B。即lg(P2/P1)。 可以看出B是一个较大的单位…...
CRM是企业AI Agent应用的关键切入点
CRM(Customer Relationship Management,客户关系管理)是一套用于系统化管理企业与客户交互的技术、策略和流程,旨在优化客户体验、提升忠诚度并驱动业务增长。其核心功能包括客户数据整合(如联系信息、交易记录、行为轨…...
aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
文章目录 aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual学习内容:1. 整体架构1.1 代码链接1.2 全体处理架构 2. 代码分析2.1 创建ImageRepo,并设定给FargateTaskDef2.2 创建CodeBuild project2.3 对CodeBuild project赋予权限&#…...
【数据分享】1999—2023年地级市市政公用事业和邮政、电信业发展情况相关指标(Shp/Excel格式)
在之前的文章中,我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据、房地产投资情况和商品房销售面积相关指标数据、社会消费品零售总额和年末金融机构存贷款余额、各类用地面积、地方一般公共预算…...
vscode 跳转失败之c_cpp_properties.json解析
{"configurations": [{"name": "Linux", // 配置名称,对应当前平台,VS Code 中可选"includePath": ["${workspaceFolder}/**", // 包含当前工作区下所有文件夹的头文件(递归&…...
批量将图片转换为 jpg/png/Word/PDF/Excel 等其它格式
图片的格式种类非常的多,常见的图片格式就有 jpg、png、webp、bmp 等等,我们在工作当中经常会碰到需要将一种格式的图片转换为其他格式的需求。今天就给大家介绍一种方法,可以实现批量转换图片格式,支持各种格式的图片之间相互转换…...
MCP+Blender创建电力塔
MCP(Model Context Protocol)与Blender的结合是当前AI与3D建模领域的热门技术,它通过协议化的方式让Claude等AI模型直接控制Blender,实现自动化3D建模。 1. 功能与原理 • 核心能力:用户通过自然语言指令(…...
kafka存储原理
topic分着存储在broker的分区中,分区进一步分为segment。 日志目录中的每一组文件都代表一个段。 段文件名中的后缀表示该段的基本偏移量。 log.segment.bytes表示分段的最大大小。 消息写入分区时,kafka会将这些消息写入段,写满了再创建一个…...
Arduino开发物联网ESP32快速入门指南(包含开发语言说明、学习路径和实战教程)
一、Arduino开发语言本质 核心语言:基于C/C的扩展语言,包含Arduino特有的API和库 特点: 去除了C的复杂特性(如STL) 内置硬件操作函数(digitalWrite()、analogRead()等) 支持面向对象编程&…...
《系统架构设计师教程(第2版)》第19章-大数据架构设计理论与实践-01-传统数据处理系统存在的问题
文章目录 1. 异步处理队列2. 数据库分区3 读写分离4. 基于Hadoop的 Map/Reduce 管道 1. 异步处理队列 出现的原因:用户访问量增加,数据库无法支撑用户请求的负载,导致数据库服务器无法及时响应用户请求解决:在Web服务器和数据库中…...
Vue接口平台学习五——测试环境页面
一、实现效果图及界面布局简单梳理 这块内容分左侧,中间,右侧三大部分 左侧: 上面一行固定内容,显示icon,名字,一个按钮。下面部分通过v-for循环读取数据库获取的测试环境列表用来展示名称。 中间&#…...
FFMpeg视频编码实战和音频编码实战
视频编码流程 avcodec_find_encoder:首先,通过指定的编码器名称(如H.264、MPEG-4等)找到对应的编码器。avcodec_alloc_context3:为找到的编码器分配一个上下文结构,这个结构包含了编码器所需的各种参数和状…...
vue+uniapp 获取上一页直接传递的参数
在小程序里页面之间跳转有时候需要传递参数给下个页面用 const toDetail item > { uni.navigateTo({ url: /pagesFood/stu/FoodSelection?groupCode1&merchCode2, }); }; 那么下个页面就要获取到这些参数,在实际开发中ÿ…...
各种排序思路及实现
目录 1.排序概念常见的排序算法 2.常见排序算法实现(1)插入排序直接插入排序希尔排序(缩小增量排序) (2)选择排序直接选择排序堆排序 (3)交换排序冒泡排序快速排序(hoare…...
GPT文生图模型新玩法
GPT-4o发布了最新的生图模型GPT-4o-Image,在图像控制力、一致性上实现了显著提升,其表现甚至展现出超越Midjourney的潜力。这款模型不仅能读懂细致的指令,还能赋予照片艺术化的新生命。接下来,我们将介绍几个有趣的实践方向&#…...
uni-app ucharts自定义换行tooltips
实现效果: 第一步:在uni_modules文件夹下找到config-ucharts.js和u-charts.js文件 第二步:在config-ucharts.js文件中配置换行格式 // 换行格式"wrapTooltip":function(item, category, index, opts){return item.name:…...
java 集合进阶
双列集合 map 实例 package mymap;import java.util.HashMap; import java.util.Map;public class MapDemo1 {public static void main(String[] args) {/*V put(K key,v value)添加元素V remove(object key)根据键删除键值对元素void clear()移除所有的键值对元素boolean c…...
RPC 2025/4/8
RPC(Remote Procedure Call),远程过程调用。 应用场景:大型微服务项目,服务部署到不同的服务器上,需要远程调用,可以使用RPC。 两个概念: 远程过程调用本地调用 RPC目的:…...
浅层神经网络:全面解析(扩展)
浅层神经网络:全面解析(扩展) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、神经网络架构演进图谱 #mermaid-svg-…...
【Hadoop入门】Hadoop生态之ZooKeeper简介
1 什么是ZooKeeper? 在分布式系统的世界里,协调各节点之间的工作是一项复杂而关键的任务。ZooKeeper正是为解决这一问题而生的开源分布式协调服务,它像一个高效的"和事佬",帮助分布式系统中的各个组件达成一致、同步状态…...
树和图论(详细整理,简单易懂!)
树和图论 树的遍历模版 #include <iostream> #include <cstring> #include <vector> #include <queue> // 添加queue头文件 using namespace std;const int MAXN 100; // 假设一个足够大的数组大小 int ls[MAXN], rs[MAXN]; // 定义左右子树数…...
CWGAN-GP 原理及实现(pytorch版)
CWGAN-GP 一、CWGAN-GP 原理1.1 CWGAN-GP 的核心改进1.2 CWGAN-GP 的损失函数1.3 CWGAN-GP 的优势1.4 关键参数选择1.5 应用场景 二、CWGAN-GP 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 查看训练损失2.7 图片转GIF2.8 模型加载和推理…...
zookeeper平滑扩缩容
在进行ZooKeeper的扩容和缩容操作时,需要注意以下几点: 数据一致性 重要性:ZooKeeper的核心特性之一是保证数据的一致性。在操作过程中,必须确保数据的一致性,以避免数据丢失或损坏。 实现方式:ZooKeeper通…...
Github 热点项目 ChartDB AI自动导表结构+迁移脚本,3分钟生成专业数据库关系图
ChartDB堪称数据库设计神器!亮点①:动动手指输入SQL,秒出结构图,表关系一目了然,团队评审时再也不用画图两小时。亮点②:AI智能转换超贴心,MySQL转PostgreSQL只需点个按钮,跨平台迁移…...
RVOS-1.环境搭建与系统引导
0.环境搭建 riscv-operating-system-mooc: 开放课程《循序渐进,学习开发一个 RISC-V 上的操作系统》配套教材代码仓库。 mirror to https://github.com/plctlab/riscv-operating-system-mooc 在 Ubuntu 20.04 以上环境下我们可以直接使用官方提供的 GNU工具链和 QEM…...
Java List<JSONObject> 转换为 List<实体类>
可以使用 Fastjson 的 toJavaObject 方法直接转换,无需中间序列化步骤。以下是具体实现和注意事项: import com.alibaba.fastjson.JSONObject; import java.util.List; import java.util.stream.Collectors;public class Converter {public static List…...
CesiumEarth v1.12 更新,支持安卓平板离线浏览3DTiles格式的三维倾斜模型
CesiumEarth v1.12 更新 2025年4月8日 阅读需 1 分钟 发布时间:2025年04月08日 新增用户登录: 从1.12版本开始需要通过登录方可使用CesiumEarth 账号可以通过邮箱免费注册 后续将陆续发布云服务相关的功能 发布Desktop版本: Deskt…...
OpenEuler运维实战-系统资源监控与性能优化-CPU·内存·IO
CPU 基本概念定界定位思路常用CPU性能分析工具 基本概念 中央处理器(Central Processing Unit,简称CPU)是计算机的主要设备之一,其功能是解释计算机指令以及处理计算机软件中的数据。 物理核:可以真实看到的CPU核&…...
react实现SVG地图区域中心点呈现圆柱体,不同区域数据不同,圆柱体高度不同
效果图: 代码: import React, { useState, useEffect } from react;const InnerMongoliaMap () > {// 每个区域的数据(名称、中心坐标、圆柱体高度值)const [regionData, setRegionData] useState([{ id: "呼和浩特市…...