自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 无锁队列原理与实现

无锁队列实现方案 摘要:本文介绍了基于原子操作实现的多线程无锁队列方案。针对生产者消费者模型中的锁竞争问题,提出了无锁队列解决方案,包括单生产者单消费者(SPSC)场景下的环形缓冲区实现。通过原子操作替换互斥锁,避免了线程切换开销和死锁风险。重点解决了伪共享问题(使用64字节对齐)、环形缓冲区优化(2的幂次容量)以及通用引用和完美转发技术处理不同类型参数构造。相比传统锁方案,无锁队列在高并发场景下显著提升吞吐量,同时保证线程安全。最后讨论了不同场景下锁、无锁和无等待方案的适用性选择。

2025-11-20 09:54:48 808

原创 原子操作及锁实现

本文介绍了原子操作的基本概念及其在多线程环境下的实现方式。首先解释了原子操作与非原子操作的区别,指出多核环境下需要硬件和软件协同保证操作的原子性。随后详细分析了计算机存储体系结构,从缓存层次到MESI协议,阐述了缓存一致性机制如何确保多核访问内存的正确性。最后重点讲解了C++的6种内存序及其应用场景,通过生产者-消费者模型展示了release-acquire内存序的典型用法,说明了如何通过内存序控制指令重排和数据可见性。全文结合存储体系结构深入剖析了原子操作的技术原理与实现机制。

2025-11-20 09:50:32 1014

原创 基于阻塞队列的数据库连接池

本文介绍了基于阻塞队列的异步数据库连接池的实现原理。通过生产者-消费者模型,连接池将数据库查询任务放入阻塞队列,由工作线程执行实际的SQL操作。采用future/promise机制实现异步通信,用户线程提交查询后可以立即返回,通过轮询future状态获取结果。文章详细阐述了连接池的架构设计,包括MySQLConnPool、MySQLConn、SQLOperation、MySQLWorker等核心组件,以及查询回调机制。相比同步连接池,该方案在高并发场景下能有效减少线程等待时间和上下文切换开销。

2025-11-20 09:48:34 685

原创 虚拟内存管理组件

本文介绍了Linux系统中虚拟内存管理的关键组件。主要内容包括:1)分析Linux虚拟内存的用户空间结构,包括代码段、数据段、堆栈等关键区域;2)提出两种内存池优化方案——定长内存池通过预分配和链表管理提高内存分配效率,不定长内存池则采用动态块大小分配,并设置阈值区分大小块内存;3)通过C语言实现了这两种内存池的核心功能,包括内存创建、分配和释放操作。文章为解决频繁内存分配导致的内存碎片和泄漏问题提供了实用方案,有助于提升系统内存管理效率。

2025-11-20 09:46:42 563

原创 基于C++的线程池

本文介绍了基于C++实现的线程池技术。线程池通过预先创建并复用固定数量的线程,有效解决了高并发场景下一请求一线程导致资源耗尽的问题。文章首先分析了线程池的原理,基于生产者消费者模型,通过阻塞队列管理任务分配。重点讨论了单队列和双队列两种实现方案:单队列使用单一互斥锁实现线程安全;双队列通过分离生产者和消费者队列提升并发性能。代码实现方面,详细讲解了阻塞队列的Pop、Push和Cancel操作,以及线程池的初始化和任务提交机制。该线程池设计能够高效协调多线程任务执行,显著提升CPU资源利用率。

2025-11-20 09:43:55 843

原创 kvstore的功能扩展

本文介绍了一个KV存储系统的功能扩展方案。在原有支持五种命令操作的基础上,新增了sort和range两种命令,分别实现数据排序和范围查询功能。同时扩展了pipeline功能,支持一次性处理多条命令并批量返回结果。系统新增了数据持久化能力,通过文件保存和加载不同数据结构中的数据。此外,针对KV存储场景优化了内存管理,引入内存池机制提升效率。最后基于主从架构实现了节点间的数据同步功能。文章详细说明了各功能的实现方法,包括命令解析、数据结构接口扩展、文件存储格式设计等关键技术点。

2025-08-15 21:30:07 935

原创 DPDK的数据包应用:pktgen与dpdk-dns

本文介绍了基于DPDK 19.08.2实现的UDP发包工具pktgen和DNS解析工具dpdk-dns。DPDK通过绕过操作系统内核协议栈,直接操作多队列网卡实现高效数据包处理。文章详细讲解了DPDK环境初始化过程,包括内存池创建、网卡队列配置等关键步骤。重点阐述了UDP数据包的组织方式,从外到内依次构建以太网头、IP头和UDP头,并说明了各字段的设置方法和校验和计算。最后介绍了主函数参数设置及数据发送的实现方法。

2025-07-31 15:42:01 1013

原创 基于Openresty的WAF防御架构

本文介绍了一种基于OpenResty的高性能WAF防御架构。该架构利用OpenResty的Lua脚本支持能力,在Nginx的11个处理阶段中嵌入安全逻辑,实现SQL注入、XSS、CC攻击等常见Web攻击的防御。系统采用Redis作为持久化存储,共享内存作为实时缓存,并通过多级Lua虚拟机隔离设计保障性能。文章详细阐述了基础黑名单及访问控制的实现方法,包括通过定时任务同步Redis黑名单数据,以及提供RESTful管理接口实现动态配置更新。

2025-07-30 14:54:30 1103

原创 QEMU中Virtio与Vhost的协作机制详解

本文详细解析了QEMU中Virtio与Vhost的协作机制。通过动态二进制翻译(TCG)实现跨架构模拟,QEMU利用Virtio标准化接口实现半虚拟化,并引入Vhost绕过QEMU提升I/O性能。系统架构部分展示了虚拟机通过Virtio队列与宿主机Vhost进程通信的过程,并配置TAP设备实现网络交互。代码实现环节演示了环境搭建、前后端通信流程及Vhost-user协议解析,重点剖析了请求头结构和字段含义。

2025-07-28 14:57:27 673

原创 高级网络通信协议:RPC

本文介绍了一款基于自定义协议的ZRPC RPC框架,采用JSON作为消息载体,实现了跨网络的函数调用。ZRPC采用C/S架构,使用协程网络框架,通过6字节头部(含CRC32校验和长度信息)解决TCP粘包问题。系统设计分为网络层、协议层和业务层:网络层处理TCP通信,协议层实现JSON编解码和CRC校验,业务层通过动态加载函数配置实现远程调用。文中详细说明了协议格式、JSON数据结构设计,以及函数注册和网络通信的关键代码实现,展示了如何通过JSON配置自动加载远程方法,并完成请求-响应流程。

2025-07-10 18:13:18 1235

原创 高性能网络框架汇总

本文对高性能网络框架进行了系统性梳理,从POSIX API基本原理出发,对比分析了四种主流网络架构。首先介绍了TCP/IP通信中的关键API及三次握手/四次挥手流程,指出传统内核协议栈的性能瓶颈。随后重点解析了四种高性能方案:基于epoll的Reactor事件驱动模型通过回调机制实现业务解耦;协程框架通过轻量级线程切换提升IO并发;Proactor架构(如io_uring和IOCP)采用异步IO队列实现零阻塞操作;DPDK用户态协议栈则绕过内核直接处理网络包。

2025-07-08 18:59:46 795

原创 Windows异步IO之IOCP

IOCP是Windows平台下的高效异步IO模型,采用Proactor模式实现高并发处理。与Linux的epoll不同,IOCP不仅管理事件通知,还接管IO操作本身。核心机制包括:创建完成端口对象、关联文件句柄、异步IO投递和完成通知获取。通过CompletionKey和OVERLAPPED结构实现操作关联,完成队列存储结果。相比Reactor模式,IOCP将IO检测与操作统一托管,完成时直接返回数据,简化了编程模型,适合Windows高并发场景。

2025-07-08 18:53:07 681

原创 异步IO之IO_Uring

异步IO之IO_Uring摘要 本文介绍了Linux内核5.4引入的IO_Uring技术,这是一种真正的异步IO解决方案。其核心在于通过两个环形队列(提交队列SQ和完成队列CQ)实现用户态与内核态的高效通信,避免了传统IO中的上下文切换开销。文章详细解析了IO_Uring的架构原理,包括环形队列数据结构、零拷贝机制和批处理特性。同时提供了一套基于IO_Uring的服务器实现方案,展示了accept、send、recv等网络操作如何通过SQE提交异步请求。

2025-07-08 18:50:19 1058

原创 TCP简易发包工具

摘要: 本文介绍了一个简易TCP发包工具的设计与实现,该工具通过命令行参数指定服务器IP、端口、线程数、连接数和请求次数,向目标服务器发送数据包并计算QPS。工具采用多线程架构,每个线程建立指定数量的TCP连接并循环发送/接收数据。核心功能包括参数解析、线程管理、TCP连接建立和数据包收发验证。主要实现包含主函数参数处理、线程回调函数、连接建立函数和数据包收发函数。该工具可用于服务器性能测试,支持自定义测试参数,并通过比较收发数据确保传输可靠性。

2025-07-08 18:48:07 499

原创 协程详解以及网络IO的协程框架

本文介绍了协程的原理及其在网络IO中的应用。首先从异步编程的回调地狱问题引出协程的价值,指出协程兼具同步编程的可读性和异步编程的并发性。文章详细讲解了三种协程实现方案:setjmp/longjmp的简单实现、ucontext上下文切换方案,并重点分析了ucontext方案中调度器(scheduler)的重要作用。最后以文件读写为例,展示了通过Hook机制拦截系统API实现协程化IO操作的具体方法。

2025-07-08 18:45:04 764

原创 从TCP到可靠传输UDP

本文介绍了TCP的可靠传输机制及KCP协议在UDP上实现可靠传输的原理。TCP通过ARQ协议、流量控制和拥塞控制确保可靠性,但在实时性要求高的场景性能不足。KCP协议基于UDP,采用选择重传、快速重传和非退让流控策略,牺牲部分公平性换取更高传输效率。KCP协议头包含会话标识、控制命令、分片编号等字段,通过优化重传机制将传输速度提升30%,仅增加10%-20%带宽开销。KCP适用于直播、网游等对实时性敏感的业务场景,实现了可靠性与低延迟的平衡。

2025-07-08 18:43:05 1038

原创 POSIX API网络通信TCP协议接口详解

摘要 本文详细介绍了POSIX API在网络通信中的应用,重点分析了TCP协议的三阶段通信流程。文章首先概述了socket、bind等基础API的作用机制,解释了套接字创建时内核如何分配TCB、fd等资源。随后深入剖析了TCP三次握手建立连接过程中listen、accept等API的内核实现,包括半连接/全连接队列的管理。最后简要提及数据传输阶段send/recv接口的工作原理。文章通过分析内核数据结构与用户态API的交互,系统性地阐述了TCP协议栈在Linux系统中的实现原理。

2025-07-08 18:38:30 1434

原创 基于reactor的百万并发和webserver、websocket应用

本文基于reactor事件驱动模型实现了百万级并发服务器,并开发了webserver和websocket应用。通过多端口监听和内核参数优化,服务器成功建立了101000个并发连接。采用reactor模型将IO事件与业务逻辑解耦,通过回调函数处理不同状态的请求。在webserver中引入状态机机制,分阶段处理HTTP请求和响应;websocket则实现了HTTP握手升级和数据帧通信。

2025-07-08 18:35:10 788

原创 select、poll、epoll的IO多路复用与reactor事件驱动方案

本文介绍了三种IO多路复用技术(select、poll、epoll)及基于epoll的Reactor事件驱动架构。首先分析了传统单线程和"一请求一线程"方案的局限性,指出其在处理高并发时的性能瓶颈。然后详细讲解了select通过文件描述符集合管理IO、poll使用结构体封装事件、epoll优化为仅处理活跃事件的演进过程。重点阐述了epoll的高效实现方式,包括事件结构体定义和内核回调机制。

2025-07-08 18:27:43 606

原创 TCP服务器:从一请求一线程到百万并发

本文介绍了C语言实现的TCP服务器从单线程到百万并发的演进过程。首先分析了传统的一请求一线程模式,通过为每个客户端连接创建独立线程处理请求;随后引入epoll I/O复用技术,采用边缘触发或水平触发模式高效管理多个连接;最后通过多虚拟机测试环境,调整系统参数和网络配置,实现服务器百万级并发连接。

2025-07-08 18:24:41 916

原创 用户态协议栈:基于dpdk的自定义网络协议栈

本文介绍了基于DPDK的用户态协议栈实现方法。传统POSIX API网络通信依赖内核协议栈,存在频繁的内核态与用户态切换效率问题。DPDK通过绕过内核监管、零拷贝技术和巨页内存管理,实现了高性能用户态网络通信。文章详细阐述了DPDK的安装配置流程,包括多队列网卡设置、巨页配置、环境变量设置和网卡绑定等步骤。同时分析了DPDK的核心架构原理,与传统内核协议栈相比,DPDK通过内存池直接映射网卡数据,避免了内核协议栈处理的开销。最后通过简单的UDP/TCP通信示例展示了DPDK的基本使用方法。

2025-07-08 18:17:20 1100

原创 自定义协议的KV存储

本文设计并实现了一个高性能KV存储系统,采用分层架构设计,包含网络层(支持Reactor、协程和IO_uring三种模式)、协议层(自定义SET/GET/DEL/MOD/EXIST指令集)和引擎层(数组、哈希表、红黑树、跳表四种数据结构)。系统通过函数指针实现分层解耦,支持10万+QPS的高性能操作。测试结果表明,不同引擎在操作复杂度、内存开销和有序性方面各有特点:哈希表适合点查场景,红黑树适合范围查询,跳表适合写入密集型应用。系统还提出了多线程优化方案和安全增强措施,适用于嵌入式系统、API网关等多样化场

2025-07-08 17:56:59 749 1

空空如也

空空如也

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

TA关注的人

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