Juya Cai

多线程并发系统设计六问

title: 高性能消息处理系统设计七问 date: 2025-08-19 16:30:31 tags: [编程心得, 后台] 一问:如何设计多线程消息处理系统(结合线程池、任务队列) 后台系统的主要作用就是消费来自网络中的请求,这些请求可以被视为消息,被网络框架解析处理的消息。高性能的消息处理系统,首先要保证网络框架需要保证这几个目标: 并发处理消息,避免消息阻塞的问题 ...

区间合并算法

区间合并问题是一个经典的问题,通常可以通过排序和遍历来解决。先根据起始位置进行排序。使用新的列表来储存合并后的区间。遍历排序后的区间,如果当前区间的起始位置大于合并列表中最后一个区间的结束位置,则将当前区间添加到合并列表中。否则,更新合并列表中最后一个区间的结束位置为当前区间的结束位置和它的结束位置的最大值。 void mergeIntervals(vector<pair<in...

Cpp体系架构

前言 本文旨在帮助读者快速复习Cpp,建立起一个完整的Cpp知识体系架构。 基础语法 函数重载和函数重写 函数重载是在一个类中声明多个同名,但参数列表不同的方法。参数列表不同可以表现在参数类型不同,参数数量不同,参数顺序不同。但是不可以根据返回值类型不同而区分。 函数重写是指基类定义虚函数,子类重写基类虚函数实现多态。 运算符重载 当应用于类的实例时,operator 关键字...

关于网络协议设计的探讨以及背后本质的思考

今天面试了家公司,面试官向我提出个问题,引发了我的思考。作为后台开发人员,我总是拘泥于掌握网络协议的工作过程和使用流程,以为了解网络协议的工作流程就能对保证正确的使用协议栈。但是面试官向我强调,很多时候互联网的新技术、新概念的出现,其实其本质的东西和一些古老的技术是相通的。我需要去理解这些技术背后的本质,就像是协议栈中的tcp和udp,需要知道其为什么存在面向连接和不面向连接的原因,存在的来...

配置信息管理和配置表生成

游戏系统中有大量的模块或对象需要开放自定义配置的能力,本篇文章讲下配置表与结构体相互映射的实现。其实配置结构的生成无外乎两种方式:手写Config类和使用代码生成工具。 手写Config类 利用go的注解能力,使得结构体具备序列化成Json对象和反序列化回结构体的能力。具体实现可以使用json包中的Marshal和Unmarshal函数。 import ( "encoding/...

高效消息处理系统设计

大部分的后端系统依赖于大量的消息处理实现各种功能服务,架构高效的消息处理系统是非常有必要的。这里笔者简单记录下日常开发常用的高效消息处理系统的设计思路。 针对游戏后台系统,状态维持在内存中。为保证高并发,必然启用多个线程处理消息,多线程环境下存在共享数据竞争的问题,比如玩家状态,玩家信息等等。传统控制共享数据串行访问的手段是锁控制,通过对共享数据的上锁和解锁来保证数据安全访问。但是锁控制会...

关于网络同步的经验与思考

前言 截至目前,笔者也接触了一些游戏项目的开发,接触过一些网络同步方案,在这里做个总结以及提出一些自己的思考。笔者目前接触的网络同步方案大致划分为三种:快照同步、状态同步和帧同步。具体采用什么方案,需要根据游戏需求以及服务器的架构需求来指定,而不是盲目的选择。 快照同步 这是笔者接触比较多的同步方法,也是三种同步方案中最为简单的。快照同步常用于逻辑简单的游戏,多为房间类型的休闲游戏,卡牌...