![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能优化、功能优化
性能优化、功能优化
橘色的喵
需要联系发邮件: stallion5632@163.com
展开
-
C++生产者-消费者无锁缓冲区的简单实现
本文将介绍如何实现无锁字节缓冲区(LockFreeBytesBuffer),并通过Google Benchmark对其性能进行测试。该缓冲区设计为单生产者单消费者(SPSC)模型,以简化线程安全问题原创 2024-06-23 23:15:55 · 504 阅读 · 0 评论 -
C++单例的安全实现,double-check(双重检查锁定)的安全实现方法
单例模式可以分为懒汉式和饿汉式,两者之间的区别在于创建实例的时间不同: + 懒汉式:指系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。(这种方式要考虑线程安全) + 饿汉式:指系统一运行,就初始化创建实例,当需要时,直接调用即可。(本身就线程安全,没有多线程的问题)--------本文给出这两种单例的安全实现方法......原创 2022-08-07 22:36:51 · 3629 阅读 · 0 评论 -
C++编程: 解读无锁队列(Lock-Free)的原理、实现和实例
本文将基于几篇无锁队列(Lock-Free)技术文章阐述无锁队列的原理并推荐开源无锁队列库原创 2024-08-01 10:58:57 · 1213 阅读 · 0 评论 -
C++实测多线程性能测试:ConcurrentQueue(无锁队列)、std::atomic_flag 和std:: mutex
本测试比较了无锁队列和std::mutex在多线程环境下的表现。结论对于使用 std::mutex 的 std::list 或 std::deque,如果 Item 结构体较小,推荐使用 std::atomic_flag 代替 std::mutex。如果 Item 结构体较大,继续使用 std::mutex。新的业务代码可以酌情使用无锁队列 ConcurrentQueue。原创 2022-07-01 03:24:36 · 1061 阅读 · 0 评论 -
[翻译] Iceoryx -无锁队列原理
Iceoryx -无锁队列原理翻译 2024-07-30 19:36:45 · 35 阅读 · 0 评论 -
C++编程: 多进程下使用文件锁互斥执行压缩
为了避免多个进程同时压缩日志文件所引发的潜在问题,我们需要引入一种有效的同步机制来控制压缩实例的并发性。文件锁作为一种经典的同步解决方案,在这种场景下尤为适用。文件锁能够确保在任何时刻只有一个进程能够持有特定文件的锁,从而有效地限制并发压缩实例的数量,确保系统资源的合理利用和稳定运行。原创 2024-07-01 23:27:28 · 966 阅读 · 0 评论 -
C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析
在现代多线程编程中,高效的并发数据结构对于提升系统性能至关重要,尤其是在处理高并发场景时。本文将详细介绍一种无锁环形队列 (`LockFreeRingQueue`) 的实现,并探讨其在实际应用中的优势与局限。原创 2024-08-16 22:31:36 · 1438 阅读 · 0 评论 -
使用perf(火焰图)查看热点函数和系统调用最大延迟函数
如何在Ubuntu amd64和ARM64平台上安装和使用perf工具进行性能调优,重点讲解了perf工具的安装步骤、查找CPU热点函数的方法,以及使用火焰图进行性能分析的具体操作,帮助开发者更高效地优化系统性能。原创 2024-05-08 13:39:43 · 1290 阅读 · 0 评论 -
Linux: 手动编译安装指定内核的perf工具
在特定情况下,您可能会发现 `apt-cache search linux-tools-$(uname -r)` 无法找到与您的自定义内核版本 (`6.8.4-060804-generic`) 相匹配的 `linux-tools`。本文将详细介绍如何编译 `perf` 工具,并解决编译过程中可能遇到的依赖问题。原创 2024-08-31 11:04:44 · 802 阅读 · 0 评论 -
C++编程:使用 std::weak_ptr 解决 std::shared_ptr 循环引用导致的内存泄漏
智能指针循环引用很容易导致 C++ 中的内存泄漏。通过使用来管理双向链表或其他类似结构中的节点连接,可以确保正确的内存管理,并避免这类问题。在实际应用中,始终要注意指针的所有权语义,确保在访问节点之前检查的有效性是非常重要的,以避免潜在的错误和异常。原创 2024-07-29 11:05:01 · 752 阅读 · 0 评论 -
C++编程:第三方内存管理库TCMalloc和Jemalloc的测试和分析
本文将介绍两个流行的内存管理库——TCMalloc(Thread-Caching Malloc)和Jemalloc,并通过代码示例对它们在不同对象大小下的性能进行对比。原创 2024-08-15 21:54:25 · 838 阅读 · 0 评论 -
使用`LD_PRELOAD`和`jemalloc`实现C/C++信号的内存堆栈信息收集
本文介绍如何结合`LD_PRELOAD`与`jemalloc`,在接收到`SIGUSR1`信号时打印程序的堆栈信息。详细步骤包括编译和配置`jemalloc`,编写信号处理程序,并通过`LD_PRELOAD`加载共享库的方法。原创 2024-06-09 20:37:25 · 816 阅读 · 0 评论 -
C++编程:使用cpp-ipc实现基于共享内存的进程间发布订阅
`mutouyun/cpp-ipc` 我们提供了一种高效、跨平台且无锁的进程间通信解决方案。本文将基于`cpp-ipc` 实现两个生产者和消费者实例,特别重点介绍可以传输大文件的示例代码。原创 2024-08-02 23:29:57 · 1312 阅读 · 0 评论 -
Linux编程:使用 AddressSanitizer (ASan) 进行C/C++内存错误检测
AddressSanitizer(ASan)是内存错误检测的强大工具,本文将介绍如何在 ARM64 系统中有效配置和使用 ASan,同时提供一个示例程序的检测流程。原创 2024-07-10 15:11:08 · 1629 阅读 · 0 评论 -
C语言: 实现memmove时的内存重叠处理
在C语言中,`memmove`和`memcpy`都用于在内存中复制数据。然而,它们有一个关键的区别:`memmove`能够安全地处理源地址(`src`)和目标地址(`dest`)之间的内存重叠问题,而`memcpy`不能。在这篇博客中,我们将深入分析`memmove`的实现,探讨它如何处理内存重叠,并展示详细的内存操作过程。原创 2024-08-11 00:46:31 · 1047 阅读 · 0 评论 -
C++编程:内存栅栏(Memory Barrier)详解及在多线程编程中的应用
在多线程编程中,内存操作的顺序一致性是一个至关重要的问题。为了确保共享数据在不同线程间的正确性,我们通常会用到**内存栅栏(Memory Barrier)**。本文将详细讲解内存栅栏的概念、为什么需要它、其背后的本质原因,以及在不同架构(如ARM64和x86)下的表现差异。原创 2024-08-16 23:25:15 · 1158 阅读 · 0 评论 -
dummy_worker C++ 预占用部分比例cpu资源,人为创造cpu资源紧张
有时候为了C++测试程序在cpu资源紧张情况下是否正常,需要人为创造cpu资源紧张。占用4个cpu核的20%比例的cpu资源。原创 2024-05-08 16:18:58 · 276 阅读 · 0 评论 -
Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息
本文将介绍一个用于监控一组进程CPU使用率的Shell脚本,,当检测到某进程的CPU使用率超出阈值时,使用 `perf` 工具抓取该进程的详细信息。本shell脚本为了能在普通嵌入式系统上运行做了妥协和优化。原创 2024-08-07 22:30:30 · 1339 阅读 · 0 评论 -
Linux编程: C++线程CPU使用率监控与分析工具
本文将介绍一个结合 C++ 和 Python 的高性能 CPU 使用率监控和分析工具。该工具通过读取 Linux 系统的 `/proc` 文件系统实时采集 CPU 使用数据,利用 UnQLite 数据库进行高效存储,并通过 Python 实现数据解析和可视化。本工具支持对多个进程同时进行分析。原创 2024-08-25 15:31:37 · 1305 阅读 · 0 评论 -
linux编程:一个简单的记录CPU负载的小工具
在Linux系统中,监控进程的CPU负载是系统性能调试和分析的重要手段。本文将介绍一个简单的记录CPU负载的小工具的实现。原创 2024-07-20 16:15:29 · 439 阅读 · 0 评论 -
Linux编程:获取特定进程的CPU和内存信息
Linux系统提供了`/proc`文件系统,通过这个文件系统,用户可以获取当前运行的进程的详细信息,包括CPU和内存使用情况。每个进程都有一个独立的目录,命名为其进程ID(PID),而在这些目录中有多个文件存储着进程的状态信息。本文将介绍如何在Linux系统上编写一个简单的C++程序,来获取指定进程(例如进程名称为`sshd`)的CPU和内存使用情况。原创 2024-07-28 23:05:02 · 337 阅读 · 0 评论 -
如何使用perf 统计cpu和内存?
PMU(Performance Monitoring Unit)是处理器内部的一个硬件单元,用于监控处理器的性能。它可以统计各种与性能相关的事件,例如CPU时钟周期、指令数量、缓存命中率等等。这些统计信息可以用来分析程序的性能瓶颈,并进行优化。除了上述的基本统计之外,perf还支持更复杂的统计功能,例如分支预测命中率、浮点运算单元利用率等等。这些功能可以通过使用perf的-e参数和-a参数来实现。在Linux系统上,常用的PMU统计工具包括perf。perf是内核自带的工具,功能比较简单。原创 2024-05-26 09:10:39 · 1428 阅读 · 0 评论 -
Linux编程: 使用 C++ 监控进程和线程的 CPU 使用情况
在 Linux 系统中,监控进程和线程的 CPU 使用情况可以帮助我们找出系统瓶颈和性能热点。本文将介绍两种方法使用 C++ 来监控 Linux 系统中进程和线程的 CPU 使用情况。原创 2024-08-25 15:49:03 · 1017 阅读 · 0 评论 -
C++编程:使用C++多线程和POSIX库模拟CPU密集型工作
本文深入探讨了如何利用C++与POSIX线程库(`pthread`)编写多线程程序,以模拟不同负载下的CPU资源占用情况。原创 2024-08-25 21:24:58 · 832 阅读 · 0 评论 -
比较日志性能:Glog、Spdlog 和 ofstream 在不同硬件上的表现(推荐Spdlog)
日志记录是嵌入式系统中关键的调试和监控手段。在选择合适的日志库时,性能往往是重要的考量因素。本文对比了 Spdlog 和 Glog 这两个流行的日志库,以及标准的 ofstream 流在嵌入式平台上的性能表现。测试包括同步和异步模式,以全面评估它们在高频日志记录场景下的性能表现。原创 2024-06-19 22:39:11 · 1577 阅读 · 0 评论 -
日志打印传值 传引用 右值引用性能测试(Linux/QNX)
Linux平台和qnx平台优化后传值性能都是比传引用的差,也比传右值的差,因此传参时有必要传递引用。编译: g++ -o test test.cpp -std=c++11 -O2。原创 2024-05-08 13:59:41 · 261 阅读 · 0 评论 -
vector、heap数组、stack数组访问性能验证
在软件开发中,优化代码性能是一项重要的任务。了解不同数据结构和访问方法的性能差异对于做出正确的选择至关重要。本文将通过测试不同数据结构和访问方法的性能来探讨这一问题,并给出相应的指导意见。原创 2024-05-08 15:00:42 · 166 阅读 · 0 评论 -
C++高性能通信:了解Iceoryx与零拷贝技术的实现与应用
iceoryx 使用真正的零拷贝共享内存方法,允许将数据从发布者传输到订阅者而无需任何副本。这可确保数据传输具有恒定的延迟,无论有效负载的大小是多少。原创 2024-07-24 23:10:10 · 1518 阅读 · 2 评论 -
性能评测技术: C++堆栈操作与宏定义的效率比较
这篇文章将通过代码示例比较三种不同的操作方式在性能上的差异。评测内容包括:使用堆栈临时变量的函数 test_stack使用 always_inline 关键字声明的内联函数 test_stack_always_inline利用宏定义 TEST_MACRO 模拟的代码块原创 2024-05-23 09:54:42 · 241 阅读 · 0 评论 -
NEON 指令集对 CRC32 加速明显,但在 CRC 计算中反而造成性能下降的分析
本文比较了使用 NEON 指令集和简单 C 循环实现 CRC 和 CRC32 校验的性能。结果表明,启用 NEON 指令集可以显著提高 CRC32 的性能,而对 CRC 的影响则相反。在 -O2 编译优化的情况下,NEON CRC32 的速度比简单 C 循环快 8 倍以上,而 NEON CRC 竟然出乎意料的比简单 C 循环慢 20%。本文就此现象分析原因原创 2024-07-02 00:00:07 · 932 阅读 · 0 评论 -
Linux访存性能测试:分析访存对CPU性能的影响
在Linux嵌入式系统开发中,性能是关键的考虑因素之一。本文将深入分析ARM开发板的访存性能,并探讨访存如何影响CPU性能。原创 2024-05-23 12:55:50 · 755 阅读 · 0 评论 -
使用C++ __builtin_expect优化程序性能后,程序体积不改变原因
使用__builtin_expect优化程序性能,开启-O3的情况下,确实程序的体积可能不改变,但是还是会产生优化效果。在Compiler Explorer 选择ARM64 gcc9.5 -O3优化。发现使用使用__builtin_expect前后程序的大小是完全一样的。在ubuntu 20.04下使用 g++ -O3测试。不使用__builtin_expect。使用__builtin_expect。上图中主要汇编指令的顺序不一致。原创 2024-05-08 14:28:33 · 386 阅读 · 0 评论 -
C++高性能编程:数据传输框架与序列化格式调研与性能测试
本文调研几种开源数据传输技术,包括FlatBuffers、Iceoryx、Zenoh、eCAL和CycloneDDS,分析其特点、适用场景及学习资源,为开发者在高性能、低延迟的数据传输系统设计中提供参考。原创 2024-08-18 10:57:12 · 377 阅读 · 0 评论 -
C++编程:生产者-消费者模型中条件变量的使用问题及优化方案
在多线程编程中,生产者-消费者模型是一种常见的并发模式。然而,不当的设计可能导致多种问题,如死锁、资源竞争或信号丢失等。本文将探讨这些问题,并提出相应的解决方案。原创 2024-08-17 13:04:26 · 1194 阅读 · 0 评论 -
ROS2阻塞和性能问题的排查和优化方案
在使用 ROS2 进行传感器驱动数据接收时,出现了明显的性能问题,导致数据偶然丢失。经过排查,发现问题源于传感器的 ClientSDK 的回调函数 `data_callback` 中执行了 `publish` 操作。由于 ROS2 的 `publish` 操作会阻塞 `data_callback` 函数所在的线程,进而引发该问题。这种现象在 ROS2 `galactic` 发行版中尤为明显,因为其默认中间件为 `rmw_cyclonedds_cpp`,而非 `rmw_fastrtps_cpp`。本文原创 2024-08-04 10:52:16 · 1042 阅读 · 0 评论 -
C++编程:高性能数据通信架构设想
本文旨在介绍一种高性能的数据通信架构设计,涵盖关键概念、数据接口设计、进程内与进程间通信、网络通信、任务优先级、状态监控与控制、配置管理和存储系统等方面。原创 2024-08-14 23:55:21 · 410 阅读 · 0 评论 -
C++高性能通信:图形简述高性能中间件Iceoryx
本文通过几个图形简述高性能通信中间件Iceoryx的重要特点原创 2024-07-30 23:05:29 · 827 阅读 · 0 评论 -
C++编程:使用GCC内置函数__builtin_prefetch优化内存访问的实测与分析
C++编程中,内存访问的效率往往是影响程序运行速度的重要因素之一。现代CPU为了减轻内存访问的瓶颈,采用了多级缓存机制,通过合理使用缓存可以显著提升程序的性能。本文将探讨如何使用`__builtin_prefetch`这一GCC提供的内置函数,来优化内存访问模式,并通过实际测试评估其效果。原创 2024-08-14 09:53:10 · 869 阅读 · 0 评论 -
探索PcapPlusPlus开源库:网络数据包处理与性能优化
本文将详细探讨 PcapPlusPlus,介绍其功能特性、实际应用示例以及模块间的关系和依赖,以帮助 C++ 工程师更好地理解和利用该库进行网络应用程序开发。原创 2024-07-01 00:15:38 · 1689 阅读 · 1 评论 -
C++编程:高性能通信组件Capnproto与Protobuf的对比分析
本文主要探讨了两种高性能通信组件:CapnProto和Protobuf。在不同硬件平台下(x86_64与aarch64)进行了延迟、吞吐量、稳定性等方面的测试与分析,并给出了具体的测试代码实现。原创 2024-08-15 23:10:09 · 1169 阅读 · 0 评论