自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 收藏
  • 关注

原创 YAML 详解

YAML 是一种适合人类阅读和维护的数据序列化格式,常用于配置文件。它使用缩进表达层级关系,语法比 XML 简洁,比 JSON 更适合人工编辑,比 INI 更适合表达复杂嵌套结构。在 C++ 工程中,使用 YAML 的核心目的不是“换一种文件格式”,而是把可变数据从 C++ 代码中拆出来,让配置和业务逻辑解耦。修改 YAML 配置值,通常不需要重新编译 C++ 程序。修改 C++ 解析逻辑或业务逻辑,才需要重新编译。如果程序只在启动时读取 YAML,那么修改 YAML 后通常需要重启程序。

2026-07-08 15:00:20 198

原创 C++ 字符串动态创建对象 -- 工厂模式、自动注册、模板递归动态调用

在游戏服务器或游戏引擎框架中,经常会遇到这样一个问题:对象并不总是由业务代码直接new出来,而是可能来自配置、网络协议、脚本、GM 命令,甚至是跨线程消息。这段代码本身没有语法问题,但在框架设计上存在明显局限。Account如果是一个由框架管理的Entity或Component,它的创建、生命周期、线程归属、注册关系、消息绑定,都不应该散落在业务代码里。。

2026-07-07 14:40:11 188

原创 ECS 存储模型:Map、Sparse Set、Archetype

ECS 存储模型不是简单地把 Component 放进容器。Entity 如何找到数据?System 如何批量找到符合条件的数据?数据如何布局才能让 CPU 更高效地访问?Map 存储简单直接,适合原型和小规模对象,但哈希查找和内存分散让它不适合作为高性能 Tick 的最终方案。Sparse Set 是非常实用的中间方案。它让单组件数据连续存储,支持 O(1) 添加、删除、查询,工程复杂度适中,特别适合中小型 ECS 和游戏服务器逻辑 ECS。Archetype + Chunk 是高性能批处理方案。

2026-07-03 00:51:47 352

原创 ECS 框架:从面向对象到数据驱动

ECS框架

2026-07-01 00:42:54 313

原创 交换型数据结构与刷新型数据结构

与此同时,场景中的对象也在不断变化:玩家进入场景,怪物死亡,技能生成子弹,Buff 到期销毁,AOI 观察者列表发生变化。如果某个消息处理逻辑比较重,例如涉及技能校验、背包检查、场景广播、数据库异步请求派发,那么网络线程在这段时间内无法继续写入消息。在游戏服务器、实时仿真系统、网络框架中,很多问题表面上看是“用什么容器”的问题,实际是“数据在什么时候被修改、由谁修改、修改时是否安全”的问题。区别在于,渲染双缓冲通常解决的是画面撕裂和显示一致性问题,而交换型消息队列解决的是跨线程数据转移和锁粒度问题。

2026-06-28 15:01:55 342

原创 状态机设计

状态机

2026-06-20 15:38:44 245

原创 C++ 自定义内存管理:从 placement new、内存对齐到对象池实践

对象池

2026-05-09 18:01:22 424

原创 C++ 内存模型与无锁编程:从底层原理到实战

我们先看一段看起来"完全没问题"的代码:这段代码的意图非常清晰:生产者先写 ,再设 ;消费者等到 后读取 。逻辑上,输出应该永远是 42。但实际上,这段代码有三个致命问题:问题一:编译器重排序(Compiler Reordering)编译器为了优化性能,可能会调换 和 的执行顺序。因为从单线程的视角看,这两条语句之间没有依赖关系,交换顺序不影响单线程的正确性。但对于多线程,顺序至关重要。** 编译器为什么要重排序?**指令流水线:最朴素的 CPU 执行方式是:一条指令彻底完成,再开始下一条。但一条

2026-05-05 22:21:58 584

原创 深入理解Treiber Stack无锁栈

栈是最简单的数据结构之一:后进先出,push往顶部插入元素,pop从顶部移除元素。单线程下,它的实现几乎没有难度。多个线程可能同时push;多个线程可能同时pop;push和pop可能交错执行;一个线程刚读到栈顶节点,另一个线程可能已经把这个节点弹出;被弹出的节点什么时候可以delete,不是一个普通内存管理问题,而是并发正确性问题;CAS 成功只代表某个原子变量被成功修改,不代表整个链表语义一定正确。CAS 循环;release-acquire 发布关系;ABA;

2026-05-05 19:00:15 383

原创 MPMC 无锁队列从原理到实现:bounded sequence ring 和 Michael–Scott

先看全景图:如果只看“有没有多个线程”,SPSC、MPSC、MPMC 看起来只是线程数不同;但从算法结构上看,MPMC 的难度其实发生了质变。MPMC 比前两者难,不只是因为“多了几个 CAS”,而是因为你必须同时解决下面几件事:一句话概括:很多工程文章会把“没有 / ”直接叫作“无锁”。这种说法在日常交流里能用,但如果你要真正学懂并发数据结构,最好把术语边界分清楚,如以下progress guarantee:本文主线是最经典、最实用的工程方案:它有几个非常实际的优点:但同样要提前说清楚:很多人第一次写

2026-04-25 17:59:54 459 1

原创 深入理解 MPSC 无锁队列:从原理到三种实现

位置使用的内存序为什么relaxed新节点还没发布给任何其他线程,单线程可见即可acq_relrelease部分:发布新节点 n 的初始化;acquire部分:拿到 prev 时能看到上游生产者对 prev 的所有 release 写release发布 n 给 consumer —— consumer 用 acquire 加载tail->next就能看到 n 的完整内容acquire与上面的 release 配对,建立跨线程 happens-beforeacquire。

2026-04-22 00:03:58 491 1

原创 从零实现 SPSC 无锁队列

现代 CPU 的缓存以cache line(典型 64 字节)为最小单位。当两个核心分别频繁修改同一条 cache line 上的不同变量时,会触发缓存一致性协议(MESI 等)不断在核心间传递这条 line 的所有权,即使它们操作的是不同的变量。这就是伪共享。对于上面的代码:实测下来,伪共享能让性能下降 5–10 倍。这通常是无锁队列最大的性能瓶颈,比内存序还关键。环形缓冲区 + 2 的幂容量,用位与代替取模;生产者和消费者的索引分别放在独立 cache line,消除伪共享;

2026-04-16 23:59:48 602 4

原创 C++ 模板与泛型编程

假设你要写一个函数来比较两个值的大小:逻辑完全相同,只是类型不同。这就是代码重复,违反了 DRY(Don’t Repeat Yourself)原则。模板的核心目的就是:让编译器帮你根据类型自动生成代码。关键概念:非类型模板参数模板参数不一定是类型,也可以是值(必须是编译期常量):应用:固定大小的环形缓冲区、编译期确定的消息 ID 范围。1.4 模板的默认参数1.5 成员函数模板类的成员函数也可以是模板,独立于类模板参数:关键理解:模板不是函数或类本身,而是编译器生成函数或类的蓝图。只有在

2026-04-04 16:14:39 473 1

原创 Gtest

Google Test(简称 gtest)是 Google 开源的 C++ 测试框架。它被广泛应用于工业级 C++ 项目中,包括 Chromium、LLVM、OpenCV 等知名项目。所有断言都支持用<<<< "当输入为 n=" << n << " 时结果不符预期";这在循环中调用断言时特别有用,能帮你快速定位是哪次迭代出了问题。死亡测试用于验证程序在特定条件下是否会按预期终止(比如触发assert、调用abort()、或exit()这在测试错误处理逻辑时非常有用。

2026-03-24 18:12:24 448

原创 Actor模型:从原理到实战,搞懂无锁高并发

Actor模型的本质是一种架构级别的并发抽象用消息传递取代共享内存,从根本上消除数据竞争用Mailbox实现异步解耦,让系统具备弹性用监督树实现自动容错,让系统具备自愈能力用位置透明实现分布式扩展,让系统具备伸缩性它不是银弹,但在正确的场景下,它能让你的并发代码从噩梦变成工程。

2026-03-19 18:00:19 552

原创 深入理解分布式系统:从 CAP 定理到 BASE 理论

本文深入剖析分布式系统的核心理论CAP定理与BASE理论。CAP定理指出分布式系统无法同时满足一致性、可用性和分区容错性,必须权衡选择CP或AP系统。BASE理论则提供工程实践方案,通过基本可用、软状态和最终一致性来平衡CAP约束。文章还澄清常见误解,并介绍PACELC模型作为CAP的补充,帮助开发者理解分布式系统的本质与设计原则。

2026-03-18 11:31:18 400

原创 项目--协程库(C++)模块解析篇

协程库实现和性能测试

2025-11-29 01:30:42 1177 1

原创 项目--协程库(C++)前置知识篇

协程库实现的前置知识

2025-11-29 01:29:24 793

原创 C++20 协程

C++20 协程

2025-11-13 00:12:10 1198

原创 项目--缓存系统(C++)

FIFO、LRU、LFU、ARC

2025-10-29 15:51:09 1072

原创 B树(B-树)

B树增删查模板

2025-10-18 00:16:24 629

原创 LRU Cache 最近最少使用

LRU模板

2025-10-15 22:43:53 183

原创 SkipList跳表

跳表模板

2025-10-15 21:05:21 663

原创 Linux -- 线程、锁

Linux线程、线程同步、生产者消费者、线程池、死锁

2025-06-20 15:38:13 1335

原创 Linux -- 进程信号

本文介绍了Linux信号机制及其应用。信号是一种进程间异步通知的软中断方式,用于处理诸如Ctrl+C(SIGINT)、硬件异常等情况。文章详细讲解了信号的生命周期(产生、保存、处理),包括通过键盘输入、kill命令、系统调用(kill/raise/abort)等多种信号产生方式。重点阐述了signal和sigaction系统调用的使用方法及区别,以及信号集操作函数(sigprocmask/sigpending等)对信号屏蔽的控制机制。此外,还分析了内核态与用户态切换机制、可重入函数、volatile关键字、

2025-06-07 18:16:05 1167 2

原创 Linux -- 进程间通信(IPC)-- 进程间通信、管道、system V 共享内存、system V 消息队列、责任链模式 、system V 信号量、建造者模式、IPC资源管理

进程间通信、管道、system V 共享内存、system V 消息队列、责任链模式 、system V 信号量、建造者模式、IPC资源管理

2025-03-25 23:33:37 1454 3

原创 Linux--软硬链接、动静态库

动静态库、ELF文件、链接与加载

2025-03-19 19:44:39 1298 3

原创 Linux -- 磁盘结构、文件系统ext2

磁盘的物理结构和逻辑结构、CHS寻址、LBA寻址、文件系统ext2、块、分区、inode、目录与文件名、路径解析、路径缓存、挂载分区

2025-03-06 18:06:59 1250

原创 Linux -- I/O接口,文件标识符fd、file结构体、缓冲区、重定向、简单封装C文件接口

文件相关

2025-03-03 18:31:10 1227

原创 Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)

进程虚拟地址空间、页表、进程控制、实现简易shell

2025-02-22 23:02:10 1561

原创 Linux--命令行参数、环境变量

命令行参数、环境变量、本地变量

2025-02-20 00:12:28 1385

原创 Linux--进程(进程概念、PCB、进程状态、孤儿进程、进程优先级、进程切换、进程调度)

进程是操作系统中的一个核心概念,指的是正在执行的程序实例。它不仅包含程序的代码,还涉及程序运行时的状态和资源。程序静态的指令集合;比如:通过语言编写的程序。进程:程序的一次动态执行,包括代码、数据和状态(将磁盘的代码加载到内存中,运行的程序称之为进程 )。进程 = 内核数据结构(例如:PCB) + 程序的代码和数据执行完就退出 -- 例如:ls,pwd等指令一直不退,直到用户退出 -- 常驻进程(例如:杀毒软件)

2025-02-19 01:03:36 1412

原创 冯·诺依曼体系结构和初步认识Linux操作系统

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),是管理计算机硬件与软件资源的系统软件,充当用户与硬件之间的桥梁。内核(进程管理、内存管理、文件管理、驱动管理)其他程序(如:函数库、shell程序等)

2025-02-17 21:27:36 1155

原创 Miller-Rabin 米勒拉宾素性检测

Miller - Rabin = 费马小定理 + 二次检测定理

2024-12-06 22:24:20 1468 2

原创 0x10 基础数据结构 -- 0x14 Hash

hash,字符串hash,最长回文子串问题,中心扩展法,插'#'优化,Manacher算法

2024-11-23 16:02:26 1259

原创 0x00基础算法 -- 0x06 倍增

倍增、ST

2024-11-19 00:33:03 771

原创 0x00基础算法 -- 0x05 排序

离散化,中位数,第k大数,归排--逆序对

2024-11-16 00:16:35 960 2

原创 0x00基础算法 -- 0x04 二分

二分

2024-11-13 00:07:49 715

原创 0x00基础算法 -- 0x03 前缀和与差分

前缀和、差分

2024-11-12 00:07:42 1062

原创 0x00基础算法 -- 0x02 递归与递推

递归、递推、分治、分形

2024-11-10 23:46:02 916

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除