自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kv存储(hash)

kv存储底层有多种数据结构的存储方法(rbtree、array、list、hash等),下面我以hash为例子简单介绍kv存储底层有多种数据结构的存储方法(rbtree、array、list、hash等),下面我以hash为例子简单介绍源码已经上传,大家可以参照学习哈希算法通过将键(Key)映射到固定大小的哈希值,直接生成存储地址索引。采用哈希算法生成索引,将键信息映射到NAND闪存或高速缓存的具体位置,大幅缩短了数据查找时间。这种设计避免了传统遍历查询的低效性,实现O(1)时间复杂度的数据访问。

2025-04-09 11:09:04 294

原创 基于 libevent 的高性能组件

基于 libevent 的详细组件使用范例代码,涵盖定时器、TCP 服务器/客户端、信号处理等核心功能,并附带关键代码解释

2025-04-07 11:30:20 310

原创 通过ssh远程启动多台服务器的不同程序

通过ssh远程启动多台服务器的不同程序

2025-04-07 11:19:48 721

原创 基于 libevent 的多线程服务端和客户端实现方案

以下是一个基于 libevent 的多线程服务端和客户端实现方案,结合线程池技术实现高并发处理

2025-04-07 10:27:57 309

原创 UDP可靠传输

确认与重传是可靠传输的基石,其核心逻辑是通过序列号标记数据包,接收方返回ACK确认,发送方通过超时未确认触发重传。发送ACK确认:构造ACK包(ack=接收的seq+数据长度),通过UDP返回给发送方。序列号(seq):递增的唯一标识,用于检测丢包、乱序(例:从1开始递增)。确认号(ack):接收方通过ack告知发送方已成功接收的序列号。标志位(flag):区分数据包(DATA)和确认包(ACK)。维护发送队列:缓存已发送但未确认的数据包(用于超时重传)。数据内容(data):实际传输的载荷。

2025-04-05 11:45:41 298

原创 RabbitMQ源码直接使用

对于多个算法,每个算法需要不同个数CPU时,要么将每个算法单独做成一个项目,独立会话;具体怎么做可以查我的博客《多进程下设置CPU亲核性》理论上所有模式可以简化看成广播模式,具体要用哪个模式,就改然后在路由处添加不一样的筛选条件;注释非常详细,自己弄来跑就可以,环境是centos7,且docker部署了MQ,Rabbitmq支持百万并发是没有问题的;信息传递不及时导致溢出队列的最大消息量,MQ会主动删掉最老的消息,这种情况要设置一个队列专门存放。1、RabbitMQ有多种模式,如何选择呢?

2025-04-04 19:26:49 574

原创 多进程下设置CPU亲核性

用户代码通过getpid()获取当前进程ID,结合cpu_set_t设置CPU亲和性。在多进程场景中,若每个进程独立调用此代码(例如父进程创建子进程后,子进程自行设置亲和性),则能实现多进程的核绑定。父进程可在fork()子进程后,通过exec系列函数启动子进程并传递不同的g_code_set值,实现差异化核心绑定。需通过sysconf(_SC_NPROCESSORS_CONF)获取系统实际CPU核心数,避免g_code_set包含无效值。继承性控制:默认情况下,子进程会继承父进程的CPU亲和性。

2025-04-04 19:25:04 143

原创 【设计模式】—五大创建型之原型模式

预先创建并缓存原型对象,避免重复初始化高成本资源(如加载模型、读取配置文件)。默认拷贝构造函数执行浅拷贝,若对象包含指针或动态资源,需手动实现深拷贝。Concrete Prototype(具体原型):实现克隆方法,复制自身。Prototype(原型接口):声明克隆方法(如 clone())。原型模式:通过复制现有对象创建新对象,适合对象创建成本高的场景。场景:游戏中的敌人角色复制,每个敌人有位置、血量、技能列表(需深拷贝)。Client(客户端):通过克隆原型对象创建新实例。

2025-04-03 15:42:22 780

原创 【设计模式】—五大创建型之工厂模式

工厂模式是创建型设计模式,用于封装对象的创建逻辑,将实例化过程与客户端代码解耦。根据场景复杂度,工厂模式分为三种:简单工厂、工厂方法和抽象工厂。答:每个具体工厂(如WindowsFactory)生产一族配套产品(按钮、文本框等),确保这些产品设计风格一致。核心思想:定义一个工厂类,根据输入参数创建不同产品对象。核心思想:提供一个接口,创建相关或依赖对象的家族,而无需指定具体类。答:工厂模式:解耦客户端与具体类,符合依赖倒置原则。缺点:违反开闭原则,新增产品需修改工厂类。

2025-04-03 13:12:14 954

原创 【设计模式】—五大创建型之观察者模式

观察者模式是行为型设计模式,用于在对象间建立一对多的依赖关系,当一个对象(Subject,主题)状态变化时,自动通知所有依赖它的对象(Observer,观察者)。答:使用 std::weak_ptr 代替裸指针或 std::shared_ptr,并在通知前检查 weak_ptr 是否有效(通过 lock() 方法)。使用 std::weak_ptr 避免循环引用(主题持有观察者的弱引用,观察者可能持有主题的强引用)。场景:天气预报系统,气象站(主题)通知多个显示设备(观察者)更新温度。

2025-04-03 11:45:55 730

原创 【设计模式】—五大创建型之策略模式

C++中可通过模板参数或 std::function 实现“鸭子类型”,只要策略对象满足特定接口即可(如拥有 applyDiscount 方法)。答:使用智能指针(如 std::unique_ptr 或 std::shared_ptr)自动管理资源,避免手动 delete。使用 std::unique_ptr 持有策略对象,避免手动 new/delete,防止内存泄漏。上下文(Context):持有一个策略对象的引用,通过接口调用算法。答:策略模式:通过组合(持有策略对象)实现算法扩展,运行时动态切换。

2025-04-03 11:38:05 875

原创 【设计模式】—五大创建型之单例模式

静态内部类SingletonHolder在首次调用getInstance()时加载,触发实例创建。双重检查(两次if (instance == null))避免多线程重复创建。特点:实例在第一次使用时创建,延迟加载节省资源,但需处理线程安全。缺点:锁粒度粗,每次调用getInstance()都需同步。特点:类加载时立即初始化实例,线程安全但可能浪费资源。缺点:无论是否使用都会创建实例,可能占用内存。特点:延迟加载 + 线程安全,无锁实现高性能。优化:减少锁的粒度,仅在第一次创建时同步。

2025-04-03 11:13:23 298

原创 C++11 六大核心特性深度解析

新增 unordered_map、unordered_set 等,基于哈希表实现,查询时间复杂度降至 O(1),适用于高频键值访问场景(如缓存系统)。提供 memory_order_relaxed、memory_order_seq_cst 等选项,平衡性能与一致性需求。独占所有权,禁止拷贝(可通过 std::move 转移),适用于资源独占场景(如文件句柄)。共享所有权,通过引用计数实现自动释放,需注意循环引用问题(结合 weak_ptr 解决)。// 哈希表存储词频。

2025-04-02 14:41:19 644

原创 哈希去重深度解析

在分布式系统中,传统哈希取模算法(hash(key) % N)存在致命缺陷:节点增减导致大量数据重定位,引发缓存雪崩。示例:在Memcached集群中,若新增节点Server4,仅需迁移Server3到Server4之间的数据,而非全量迁移。原理:通过位数组和多个哈希函数表示集合,查询时若所有哈希位均为1则可能存在(允许误判),否则一定不存在。哈希环:将哈希空间映射为环形结构(0~2^32-1),节点与数据均通过哈希函数映射到环上。优势:空间效率极高(1亿数据仅需12MB内存),适合海量数据去重。

2025-04-02 14:17:45 909

原创 红黑树、B树、B+树深度解析及应用场景

红黑树、B树、B+树的设计哲学体现了计算机科学中时空权衡的核心思想:红黑树以内存效率优先,B/B+树以磁盘I/O优化为纲。关键区别总结:树高与I/O优化:B/B+树通过多叉结构显著降低树高(例如1亿数据下,红黑树高约30,B+树仅需3-4层),减少磁盘访问次数。核心原理:非叶子节点仅存储键(不存数据),所有数据存储在叶子节点,且叶子节点通过链表连接形成有序序列。数据存储位置:B+树将数据集中在叶子节点,非叶节点仅存储索引,提升节点利用率。内存操作优先红黑树(高频增删),磁盘存储必选B+树(I/O优化)。

2025-04-02 14:07:22 414

原创 报错:/usr/bin/ld: 找不到 -lclntsh: 没有那个文件或目录

在使用gcc编译器时,链接动态库 -locci -lclntsh,设置环境变量不行之后,又加了(-L库文件路径),变成-locci可以,但是-lclntsh不行

2023-02-08 19:25:05 3208

原创 解决vi: symbol lookup error: /lib/x86_64-linux-gnu/libpython3.10.so.1.0: undefined symbol: XML_SetHash

解决报错----vim/vi: symbol lookup error: /lib/x86_64-linux-gnu/libpython3.10.so.1.0: undefined symbol: XML_SetHash

2023-02-08 17:29:00 2315

kv存储的多种方案,testcase为例子提供给大家学习,c++

kv存储的多种方案,testcase为例子提供给大家学习,c++

2025-04-09

三大高性能池化组件,线程池,内存池,连接池

项目源码

2025-04-05

UDP可靠传输(kcp)

基于培训课,有测试,有讲解,有pdf文档

2025-04-05

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

TA关注的人

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