- 博客(5)
- 收藏
- 关注
原创 手写 Linux 并发服务器,fork, pthread与 epoll 模型实战(包含深层原理剖析)
本文介绍了Linux网络编程中最基础的服务器模型。首先展示了一个单线程阻塞的echo服务器,该服务器通过socket、bind、listen、accept和read/write五个步骤实现,但存在无法并发处理多个客户端连接和一次性服务的致命缺陷。为解决这些问题,文章提出了多进程模型改进方案:主进程负责接收连接请求,子进程处理具体通信任务。这种改进实现了并发处理和持续服务能力。文中还强调了端口复用设置、网络字节序转换等关键细节,为后续学习更复杂的并发模型奠定了基础。
2025-12-17 15:49:55
620
1
原创 C进阶之内存对齐,硬件总线和高并发伪共享的底层原理
本文从硬件视角深入解析了C语言中内存对齐的原理。CPU通过数据总线以固定块大小(如4或8字节)访问内存,若数据跨越块边界会导致性能下降甚至崩溃。因此编译器会对结构体进行填充,确保每个成员的地址是其大小的整数倍。例如,包含char和int的结构体实际占用8字节而非5字节,这是用空间换取访问效率的典型策略。文章还介绍了编译器遵循的成员对齐和整体对齐原则,并指出跨平台开发时应避免使用long等类型,推荐使用stdint.h中的明确宽度类型。理解内存对齐机制对编写高效、跨平台的代码至关重要。
2025-12-15 14:40:43
1046
原创 Linux 文件拷贝性能对比:裸 `read/write` VS `fread/fwrite` —— 页面缓存与用户缓冲的真相(附完整测试代码)
简单来说,Page Cache 就是内核在物理内存 (RAM) 中开辟的一块区域,专门用来缓存磁盘文件的数据。它就像是内核给自己建的一个内存硬盘,把最近访问过的文件数据都存在里面。到这儿,如果看过我上一篇文章的朋友,标题为《C语言实战:手搓高并发异步日志库(基于 Ring Buffer 和生产者消费者模型)》的3.1.3节,可能会想起 CPU 的三层缓存,为了帮大家区分并且更加深入的了解 Page Cache ,下面我将先介绍他们的共同点,在介绍他们的区别,以对比的方式列出他们的区别。
2025-12-14 17:56:38
744
原创 C语言实战:手搓高并发异步日志库(基于 Ring Buffer + 生产者消费者模型)
本文介绍了如何用C语言实现一个高并发异步日志库,基于环形缓冲区和生产者-消费者模型。传统同步日志(如printf)存在阻塞、线程安全、缓存刷新等问题,严重影响性能。异步日志通过解耦日志生成与磁盘写入,业务线程仅需快速写入内存缓冲区,由独立后台线程负责落盘。文章详细分析了生产者-消费者模型架构,解释为何采用MPSC(多生产者单消费者)模式,并对比了链表与环形缓冲区的优劣,指出链表存在内存碎片、分配开销和缓存不友好等缺陷。该设计能显著提升性能(实测快300倍),适用于嵌入式、高并发等场景。
2025-12-12 20:24:40
804
2
原创 深入内存布局:char *p 与 char p[ ] 的底层原理与崩溃真相
摘要:本文深入解析C语言中两种字符串定义方式的本质区别。通过代码演示和内存分析,揭示char *p="Hello"将字符串置于只读数据区(.rodata),而char p[]="Hello"在栈上创建可修改副本的关键差异。详细解释了修改指针定义字符串导致崩溃(MMU保护机制)和函数返回数组指针产生悬空指针(栈帧销毁)的原理,帮助开发者避免常见陷阱。文章从内存布局、编译过程和硬件保护等多维度剖析问题本质,为C语言字符串处理提供深度认知。
2025-12-11 14:57:52
1015
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅