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

性能优化-初识(C++)

性能优化-初识

  • 一、内联与优化(Inlining and Optimization)
    • 什么是内联(inline)?
    • 使用方式:
    • 适用场景:
    • 注意事项:
  • 二、缓存友好设计(Cache-Friendly Design)
    • 原理简介:
    • 常见优化策略:
    • 示例:
    • 典型流程:
  • 四、编译器优化选项(Compiler Optimization Flags)
    • GCC / Clang 常用选项:
    • MSVC(Visual Studio)优化选项:
    • 附加建议:
  • 内存管理与分配优化
    • 1. 避免频繁 new/delete
    • 2. 智能指针正确使用
    • 3. 内存对齐(Alignment)
  • 多线程与并发优化
    • 1. 线程本地存储(Thread-local Storage)
    • 2. 锁优化
    • 3. 并行 STL 算法(C++17+)
  • 算法和数据结构选择
    • 1. 容器选择影响性能
    • 2. 节省数据拷贝
  • 文件与IO优化
    • 1. 减少 I/O 调用次数
    • 2. 异步IO 或 多线程处理IO
  • 函数级与架构优化
    • 1. 函数调用开销控制
    • 2. Loop Unrolling(手动或编译器自动)
  • 构建优化与持续测试
    • 1. 使用 ccache 或 sccache
    • 2. 单元测试与基准测试
  • 总结表:其他常见优化方向

一、内联与优化(Inlining and Optimization)

什么是内联(inline)?

内联是一种将函数调用展开为其函数体代码的优化方式,避免函数调用带来的栈帧开销和跳转成本。

使用方式:

inline int add(int a, int b) {return a + b;
}

适用场景:

  • 短小函数(如 getter/setter,运算符重载)

  • 频繁调用的函数

注意事项:

  • 编译器有权忽略 inline 建议。

  • 大函数内联会导致 代码膨胀(code bloat),反而影响指令缓存性能。

  • 内联函数需定义在头文件中以供编译器在编译期展开。

二、缓存友好设计(Cache-Friendly Design)

原理简介:

现代 CPU 使用多级缓存(L1/L2/L3)来缓解内存访问瓶颈。缓存命中率越高,程序运行越快。

常见优化策略:

技术描述
尽量使用 vector 而非 list连续内存,支持预取
结构体紧凑排列避免空隙,减少 false sharing(不同线程访问同一 cache line 的不同字段)
数据局部性将一起访问的数据尽可能放在一起(如将数组而非链表用于遍历)
避免非连续访问使用线性遍历而非跳跃式访问(如避免随机访问 vector)
预取/分批处理使用块处理以适应 cache 大小,例如矩阵分块乘法(blocking)
使用对象池替代频繁 new/delete如 boost::object_pool
使用 alignas(64) 防止 false sharing尤其在多线程中共享数组元素时

示例:

// 差:链表访问,内存不连续
struct Node { int val; Node* next; };// 好:数组访问,内存连续
int arr[1000];
for(int i = 0; i < 1000; ++i) process(arr[i]);

三、性能分析工具(Profiling Tools)
性能优化不是拍脑袋,必须依靠分析工具定位瓶颈。以下是常用工具列表:

工具平台作用
gprofLinuxGNU profiler,适用于基本性能分析
perfLinux高级性能分析(支持硬件事件,如 cache misses)
ValgrindLinux内存分析工具(配合 callgrind 模块查看函数调用图)
Intel VTuneWindows/Linux强大的商业工具,适用于多线程和 CPU 优化
Visual Studio ProfilerWindows支持图形化分析 CPU/内存/线程使用
Instruments (Xcode)macOSApple 提供的性能分析套件

典型流程:

  • 使用 g++ -pg 编译可执行文件;

  • 运行程序生成 gmon.out;

  • 执行 gprof ./a.out gmon.out > report.txt 查看报告。

四、编译器优化选项(Compiler Optimization Flags)

编译器是优化的第一道关口,正确使用优化选项非常关键。

GCC / Clang 常用选项:

选项描述
-O0无优化,方便调试
-O1 / -O2 / -O3不同等级的优化:-O3 激进优化,适合对性能敏感的 release 构建
-Ofast-O3 更激进,可能违反标准(如不保留 IEEE 浮点行为)
-march=native使用当前 CPU 的全部指令集
-fltoLink Time Optimization,跨文件优化
-funroll-loops展开循环,提高性能(适用于计算密集场景)
-ffast-math数学函数加速,但可能失去精度保障

MSVC(Visual Studio)优化选项:

  • /O1, /O2: 优化速度

  • /GL: 全程序优化(类似 LTO)

  • /arch:AVX2, /arch:ARM64: 指定目标架构

  • /fp:fast: 快速浮点优化

附加建议:

建议说明
使用 const, constexpr编译期计算、减少运行时开销
避免频繁动态内存分配尽可能使用对象池、预分配
STL 容器选择合理vector 优于 list,特别是遍历场景
多线程需注意共享资源与 false sharing使用 alignas(64) 避免线程竞争

内存管理与分配优化

1. 避免频繁 new/delete

  • 动态内存分配慢,容易碎片化。

  • 优化建议:

    • 使用 对象池(如 boost::object_pool)

    • 用 reserve() 预分配容器容量

    • 对于小对象,使用 内存池(Memory Pool)

std::vector<int> vec;
vec.reserve(100000); // 预分配,避免反复扩容和复制

2. 智能指针正确使用

  • std::shared_ptr 有引用计数机制,性能比 unique_ptr 差

  • 避免不必要的 shared_ptr 拷贝

void f(std::shared_ptr<T>); // ❌ 传值,会增加引用计数
void f(const std::shared_ptr<T>&); // ✅ 避免开销

3. 内存对齐(Alignment)

  • 使用 alignas(64) 确保数据结构与 CPU cache line 对齐

  • 避免 false sharing(多线程共享变量落在一个 cache line)

多线程与并发优化

1. 线程本地存储(Thread-local Storage)

  • thread_local 关键字用于声明线程私有变量,避免锁竞争。
thread_local static int buffer[1024]; // 每个线程一份

2. 锁优化

  • 减少锁的粒度和频率

  • 使用 std::shared_mutex 替代 std::mutex 实现读写分离

  • 使用无锁结构(如 concurrent_queue)可避免阻塞

3. 并行 STL 算法(C++17+)

  • 使用 std::execution::par 开启并行化算法
std::sort(std::execution::par, data.begin(), data.end());

算法和数据结构选择

1. 容器选择影响性能

任务类型推荐容器
快速随机访问std::vector
插入/删除频繁std::deque, std::list
有序查找std::map
高速查找std::unordered_map(哈希表)

2. 节省数据拷贝

  • 使用 emplace_back 替代 push_back + 构造
vec.emplace_back(1, 2); // 直接构造对象
  • 使用 std::move 避免不必要的深拷贝

文件与IO优化

1. 减少 I/O 调用次数

  • 批处理写入(例如先写入内存缓冲区)

  • 使用大块 fread/fwrite 替代小块多次调用

2. 异步IO 或 多线程处理IO

  • 使用线程池或 std::async 后台加载

  • Unix/Linux 环境可用 mmap 直接内存映射文件,提高访问效率

函数级与架构优化

1. 函数调用开销控制

  • 避免深层递归(使用迭代或尾递归优化)

  • 减少虚函数调用(可使用 CRTP)

// CRTP 替代虚函数
template <typename Derived>
class Base {
public:void interface() {static_cast<Derived*>(this)->implementation();}
};

2. Loop Unrolling(手动或编译器自动)

  • 将循环体展开,减少跳转

  • 编译器如 -funroll-loops 可自动展开

for (int i = 0; i < n; i += 4) {sum += arr[i] + arr[i+1] + arr[i+2] + arr[i+3];
}

构建优化与持续测试

1. 使用 ccache 或 sccache

  • 缓存编译结果,加速编译过程(对大项目非常重要)

2. 单元测试与基准测试

  • 使用 Google Benchmark 创建微基准测试

  • 自动跟踪性能回退

BENCHMARK(MyFunc)->Range(8, 8<<10); // Google Benchmark 示例

总结表:其他常见优化方向

类型优化方式
内存对齐、对象池、预分配
并发读写锁、线程局部存储、减少锁粒度
IO批量处理、异步IO、文件映射
STL 容器vector 替代 list、使用 unordered_map
编译优化-O3-flto-march=native
架构与算法CRTP、循环展开、尾递归、跳表、B+树等
测试与持续集成性能基准测试、perf, gprof, benchmark 工具

相关文章:

性能优化-初识(C++)

性能优化-初识 一、内联与优化&#xff08;Inlining and Optimization&#xff09;什么是内联&#xff08;inline&#xff09;&#xff1f;使用方式&#xff1a;适用场景&#xff1a;注意事项&#xff1a; 二、缓存友好设计&#xff08;Cache-Friendly Design&#xff09;原理简…...

[人机交互]交互设计过程

*一.设计 1.1什么是设计 设计是一项创新活动&#xff0c;旨在为用户提供可用的产品 –交互设计是“设计交互式产品、以支持人们的生活和工作” 1.2设计包含的四个活动 – 识别用户的需要&#xff08; needs &#xff09;并建立需求&#xff08; requirements &#xff09; …...

密码学基石:哈希、对称/非对称加密与HTTPS实践详解

密码学是现代信息安全的基石&#xff0c;它提供了一系列强大的数学工具和技术&#xff0c;用于保护数据的机密性、完整性和真实性&#xff0c;并确保通信双方的身份可被认证。在纷繁复杂的网络世界中&#xff0c;无论是安全的网页浏览 (HTTPS)、安全的软件更新、还是用户密码的…...

WebRTC通信原理与流程

1、服务器与协议相关 1.1 STUN服务器 图1.1.1 STUN服务器在通信中的位置图 1.1.1 STUN服务简介 STUN&#xff08;Session Traversal Utilities for NAT&#xff0c;NAT会话穿越应用程序&#xff09;是一种网络协议&#xff0c;它允许位于NAT&#xff08;或多重 NAT&#xff09;…...

ChromaDB调用BGE模型的两种实践方式

ChromaDB调用BGE模型 前言1.chromadb调用BGE模型api2.调用本地模型 前言 在语义搜索、知识库构建等场景中&#xff0c;文本向量化&#xff08;Embedding&#xff09;是核心技术环节。作为一款开源的向量数据库&#xff0c;ChromaDB允许开发者通过自定义嵌入函数灵活对接各类模…...

解构与重构:自动化测试框架的进阶认知之旅

目录 一、自动化测试的介绍 &#xff08;一&#xff09;自动化测试的起源与发展 &#xff08;二&#xff09;自动化测试的定义与目标 &#xff08;三&#xff09;自动化测试的适用场景 二、什么是自动化测试框架 &#xff08;一&#xff09;自动化测试框架的定义 &#x…...

如何巧妙解决 Too many connections 报错?

1. 背景 在日常的 MySQL 运维中&#xff0c;难免会出现参数设置不合理&#xff0c;导致 MySQL 在使用过程中出现各种各样的问题。 今天&#xff0c;我们就来讲解一下 MySQL 运维中一种常见的问题&#xff1a;最大连接数设置不合理&#xff0c;一旦到了业务高峰期就会出现连接…...

【卡特兰数】不同的二叉搜索树

文章目录 96. 不同的二叉搜索树解法一:动态规划状态表示状态转移方程初始化遍历顺序返回值💥解法二:卡特兰数96. 不同的二叉搜索树 96. 不同的二叉搜索树 ​ 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉…...

《饶议科学》阅读笔记

《饶议科学》 《偷窃的生物学机制&#xff1a;&#xff08;有些&#xff09;小偷有药可治》阅读笔记 核心内容&#xff1a;探讨偷窃狂&#xff08;kleptomania&#xff09;的生物学机制及相关研究。具体要点 偷窃狂的特征&#xff1a;患者不可抑制地反复偷窃个人不需要、与金钱…...

ShardingJdbc-公共表

ShardingJdbc-公共表 公共表 公共表属于系统中数据量小&#xff0c;变动少&#xff0c;但是却高频联合查询的表&#xff0c;参数表&#xff0c;字典表等属于此类型。可以将此类表在每个数据库中存储一份&#xff0c;所有更新操作将同时发送到所有分库执行。 案例 建立库 shar…...

低成本监控IPC模组概述

1、低成本sigmastar ssc335\ssc377摄像机方案&#xff0c;配合AI边缘计算终端即插即用&#xff0c;差异化AI训练及样 本采集 2、支持200万、500万H265\H264视频编码&#xff0c;支持网络Rtsp,Rtmp,Onvif&#xff0c;web,GB28181,tf卡本地录像&#xff0c; 视频平台接入等...

携手高校科研团队,共建TWS耳机芯片技术新生态

TWS&#xff08;真无线立体声&#xff09;蓝牙耳机已成为人们生活中不可或缺的一部分。而在这背后&#xff0c;有一家名为华芯邦的公司&#xff0c;其专注于TWS蓝牙仓耳机芯片的研发&#xff0c;并不断取得令人瞩目的突破。 一、芯片领域的实力玩家 华芯邦作为一家在芯片行业崭…...

动态规划-91.解码方法-力扣(LeetCode)

一、题目解析 将对应字符转化为数字&#xff0c;我们知道有的大写字母范围是在[1&#xff0c;9]&#xff0c;剩下的则是[10&#xff0c;26]&#xff0c;这个对应关系使我们解题的关键。 二、算法原理 1.状态表示 dp[i]表示&#xff1a;以i位置为结尾时&#xff0c;解码方法总…...

(三)Java数据类型与进制详解

一、Java数据类型概述 Java是一种强类型语言&#xff0c;这意味着每个变量和表达式在编译时都必须有明确的类型。Java的数据类型系统是其核心基础之一&#xff0c;它决定了如何存储数据、能存储什么样的数据以及能对数据执行哪些操作。 1.1 为什么需要数据类型 数据类型在编…...

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的&#xff0c;之前都是手写 Jenki…...

【Linux庖丁解牛】—程序地址空间【进程地址空间 | 虚拟地址空间】

1. 再谈空间分布图 我们之前在学C/C的时候必然学过上面的空间分布图。 可是我们对他并不理解&#xff01;这里先对其进行各区域分布验证&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int ma…...

nginx 上传文件,413 request entity too large

目录 1 问题2 解决 1 问题 前端后端项目&#xff0c;上传文件&#xff0c;接口没问题&#xff0c;但是就是上传不成功 &#xff0c;然后打开f12 &#xff0c;发现这个接口出现413 request entity too large 这个报错 2 解决 1.1 修改nginx配置文件 在Nginx中&#xff0c;cli…...

Nacos源码—5.Nacos配置中心实现分析二

大纲 1.关于Nacos配置中心的几个问题 2.Nacos如何整合SpringBoot读取远程配置 3.Nacos加载读取远程配置数据的源码分析 4.客户端如何感知远程配置数据的变更 5.集群架构下节点间如何同步配置数据 4.客户端如何感知远程配置数据的变更 (1)ConfigService对象使用介绍 (2)客…...

数智管理学(八)

四、未来管理学可能的新拓展方向 &#xff08;一&#xff09;人工智能与机器学习的融合形成智能决策管理职能 随着人工智能和机器学习技术的不断发展&#xff0c;它们将在管理学中得到更广泛的应用。传统决策方法难以快速处理海量数据并准确把握复杂的市场动态。人工智能与机…...

Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload

随着 Compose Multiplatform 1.8.0 的发布&#xff0c;iOS 版本也引来的第一个稳定版本&#xff0c;按照官方的原话&#xff1a;「iOS Is Stable and Production-Ready」 &#xff0c;而 1.8.0 版本&#xff0c;也让 Kotlin 和 Compose 在移动端有了完整的支持。 在 2023 年 4 …...

spark基本介绍

一、Spark概述 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Hadoop是一个分布式系统结构的基础架构。 二、Spark与Hadoop相比较的优势&#xff1a; 1. 处理速度&#xff1a;Hadoop&#xff1a;数据处理速度相对较慢 Spark&#xff1a;速度比Hadoop快很…...

DeepSeek智能时空数据分析(九):NL2SQL绘制河流名字-如何给轨迹添加说明文字

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…...

管家婆实用贴-如何在Excel中清除空格

我们在使用管家婆软件时&#xff0c;经常会用到Excel表格导入导出数据&#xff0c;在使用Excel整理数据时&#xff0c;数据中的空格可能会导致计算和分析出现问题。无论是多余的前导空格、尾部空格还是单元格中的不必要空格&#xff0c;清除它们都是确保数据准确性的关键。今天…...

《软件项目管理》笔记一

软件项目管理概述 项目管理属于软件工程的组成之一&#xff0c;另外两部分为&#xff1a;软件开发&#xff0c;过程改进。 参考书如下&#xff1a; 1.1 项目与软件项目 1、项目&#xff1a; 为了创造一个唯一的产品或提供一个唯一的服务而进行 的临时性的努力。 2、项目的…...

前端线上错误日志收集与定位指南

想象一下&#xff1a;你的Web应用上线后&#xff0c;用户反馈“按钮点不动”或“页面白屏”&#xff0c;但你却无从下手&#xff01;前端线上错误如JavaScript异常、网络失败&#xff0c;稍不注意就让用户流失&#xff0c;业务受损。令人抓狂的是&#xff0c;80%的错误悄无声息…...

可视化魔法指南

🎨 ECharts数据可视化魔法指南 🌟 ECharts:数据的艺术画笔 #mermaid-svg-ARwFHUrXBJ03Gpo9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ARwFHUrXBJ03Gpo9 .error-icon{fill:#552222;}#mermaid-svg-ARwFHUr…...

使用ffmpeg截取MP3等音频片段

可以使用以下命令通过 ffmpeg 截取 MP3 音频文件的指定片段: ffmpeg的安装方法参考:linux 安装包方式安装ffmpeg,并在环境中设定或指定ffmpeg地址_linux 通过ffmpeg访问地址-CSDN博客 ffmpeg -ss [start_time] -i input.mp3 -to [end_time] -codec copy output.mp3 参数说…...

FFmpeg(7.1版本)编译生成ffplay

FFmpeg在编译的时候,没有生成ffplay,怎么办? 1. 按照上一篇文章:FFmpeg(7.1版本)在Ubuntu18.04上的编译_ffmpeg-7.1-CSDN博客 在build.sh脚本里配置了ffplay 但是,实际上却没有生成ffplay,会是什么原因呢? 2. 原因是编译ffplay的时候,需要一些依赖库 sudo apt-get i…...

CAN学习之--不使用收发器进行通讯测试

在实际调试或者学习CAN通讯过程中&#xff0c;在需要进行CAN调试的时候&#xff0c;但是手头有只有MCU的评估板&#xff0c;没有CAN的收发器&#xff0c;比如ATA6561、MCP2518这类芯片的时候&#xff0c;该怎么办呢&#xff1f; 因为我们知道&#xff0c;CAN收发器只是做信号的…...

律所项目管理全攻略:人力分配 / 案件管控 / 知识沉淀三维度解析(附专用工具清单)

引言&#xff1a;律所项目管理破局 ——从经验驱动到体系化运营 在法律服务行业数字化转型加速的背景下&#xff0c;律所项目管理能力已成为决定服务质量、客户满意度及团队效能的核心竞争力。从人力分配失衡导致的效率损耗&#xff0c;到案件流程模糊引发的客户信任危机&…...

Linux电源管理(7)_Wakeup events framework

原文链接&#xff1a;Linux电源管理(7)_Wakeup events framework 1. 前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题&#xff0c;是近几年Linux kernel最具争议的话题之一&#xff0c;在国外Linux开发论坛&…...

Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)

问题排查 在linux服务器上运行 nvidia-smi 命令&#xff0c;提示以下错误&#xff1a; Failed to initialize NVML: Driver/library version mismatch 首先查看内核驱动版本&#xff1a; cat /proc/driver/nvidia/version然后查看当前NVIDIA驱动版本&#xff1a; sudo dpkg …...

算法设计与分析实验题-序列对齐

基于 C 的序列最大对齐得分算法实现 在生物信息学和文本处理领域&#xff0c;序列对齐是一种常见的需求。本文将介绍如何使用 C 实现一个序列最大对齐得分算法&#xff0c;该算法可以计算两个序列在最优对齐方式下的最大得分。 问题描述 给定两个序列 S1 和 S2&#xff0c;我…...

第8章-1 查询性能优化-优化数据访问

上一篇&#xff1a;《 下一篇&#xff1a;《第7章-3 维护索引和表》》 在前面的章节中&#xff0c;我们介绍了如何设计最优的库表结构、如何建立最好的索引&#xff0c;这些对于提高性能来说是必不可少的。但这些还不够——还需要合理地设计查询。如果查询写得很糟糕&a…...

每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++

P1025 [NOIP 2001 提高组] 数的划分 - 洛谷 (luogu.com.cn) #include<iostream> using namespace std; int n, k; int res 0; void dfs(int num,int step,int sum) {//判断if (sum n) {if (step k) {res;return;}}if (sum > n || step k)return;//搜索for (int i …...

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

WHAT - Rust 智能指针

文章目录 常见的智能指针类型1. Box<T> — 堆上分配的数据2. Rc<T> — 引用计数的共享所有权&#xff08;单线程&#xff09;3. Arc<T> — 原子引用计数&#xff08;多线程&#xff09;4. RefCell<T> — 运行时可变借用&#xff08;单线程&#xff09;…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)

这里我们来实现这个RPC的client端 为了实现RPC的效果&#xff0c;我们调用的Hello方法&#xff0c;即server端的方法&#xff0c;应该是由代理来调用&#xff0c;让proxy里面封装网络请求&#xff0c;消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…...

CentOS 安装 Zellij 终端复用器教程

CentOS 安装 Zellij 终端复用器教程 简介 Zellij 是一个现代化的终端复用器&#xff0c;使用 Rust 语言编写。它提供了类似 tmux 的功能&#xff0c;但具有更友好的用户界面和更现代化的特性。本教程将详细介绍如何在 CentOS 7.9 系统上安装 Zellij。 前置条件 CentOS 7.9 …...

基于 SpringBoot + Vue 的校园管理系统设计与实现

一、项目简介 本系统以校园组织管理为主线&#xff0c;结合用户权限分离机制与模块化设计&#xff0c;实现对“单位类别、单位、通知推送、投票信息、用户回复”等内容的全流程管理&#xff0c;广泛适用于教育局、高校及下属组织的信息管理工作。 &#x1f3af; 项目亮点&…...

如何减少锁竞争并细化锁粒度以提高 Rust 多线程程序的性能?

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种常用的同步机制&#xff0c;用于保护共享数据免受多个线程同时访问造成的竞态条件&#xff08;Race Condition&#xff09;。然而&#xff0c;不合理的锁使用会导致严重的性能瓶颈&#xff0c;特别是在高并发场景…...

【人工智能agent】--dify通过mcp协议调用工具

MCP Client 发起工具调用的实体&#xff0c;也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口&#xff08;工具节点&#xff09;来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中&#xff0c;就是模拟 API 服务器 上的各个API (/api/pump/st…...

Review --- Redis

Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的&#xff0c;key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库&#xff08;存储一些简单的数据&#xff0c;例如新闻点赞量&#xff09;&#xff0c;**缓存&#xff08;秒…...

Sql刷题日志(day8)

一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string&#xff1a;要操作的字符串。length&#xff1a;要从右侧提取的字符数 */ 2、curdate():返回当前日期&#xff0c;格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈&#xff0c;因…...

【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络

(导读 ) 人工智能对计算性能需求剧增&#xff0c;电子微处理器发展受功耗限制。光学计算有望解决这些问题&#xff0c;光学神经网络&#xff08;ONNs&#xff09;成为研究热点&#xff0c;但现有 ONNs 因设计缺陷&#xff0c;在图像分类任务中精度远低于现代电子神经网络&#…...

2025-05-07 Unity 网络基础8——UDP同步异步通信

文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 ​ 客户端和服务端的流程如下&#xff1a; 创建套接字 Socket。用 Bind() 方法将套…...

K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析

一、金丝雀发布概述 1.1 什么是金丝雀发布&#xff1f; 金丝雀发布&#xff08;Canary Release&#xff09;是一种渐进式部署策略&#xff0c;通过逐步将生产流量从旧版本迁移至新版本&#xff0c;结合实时指标验证&#xff0c;在最小化风险的前提下完成版本迭代。其核心逻辑…...

手持小风扇方案解说---【其利天下技术】

春去夏来&#xff0c;酷暑时节&#xff0c;小风扇成为外出必备的解暑工具&#xff0c;近年来&#xff0c;随着无刷电机的成本急剧下降&#xff0c;小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达&#xff0c;其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...

Qt开发:枚举的介绍和使用

文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM&#xff08;Qt 5.5 及以上&#xff09;3.2 示例&#xff1a;枚举值转字符串3.4 示例&#xff1a;字符串转枚举值 四、枚举与字符串相互转换五、枚…...

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时&#xff0c;集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK&#xff0c;实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先&#xff0c;需要在项目的文…...