- 博客(172)
- 资源 (17)
- 收藏
- 关注
原创 基于select的一个比较完整的网络编程示例
这篇文章介绍了一个基于select的高性能事件循环库(event_loop),具有以下核心特性: 实现了完整的非阻塞I/O和多路复用机制 支持动态事件表管理,包括自动扩容和惰性删除 提供读写错误回调分离机制 集成了信号处理(SIGINT/SIGTERM优雅退出) 实现了最小堆定时器(支持单次/重复/重置) 确保内存安全(无double free和内存泄漏) 使用方式简洁: 通过event_add/event_set注册I/O事件 通过timer_add注册定时器 调用event_loop_run进入主循环
2026-05-11 11:50:25
82
原创 Linux高频代码调试方法(by deepseek)
摘要 在Linux应用层调试高频调用代码时,直接使用printf会导致日志刷屏和性能下降。本文提出了多种调试方法:1)日志降频与采样,通过计数或时间窗口控制输出;2)环形缓冲区,内存记录关键信息后导出;3)异步日志库,将IO操作移至后台线程;4)性能剖析工具如perf分析热点;5)eBPF等跟踪工具动态插桩;6)GDB条件断点捕捉特定条件。建议根据调用频率选择方案,高频场景优先使用eBPF或perf等低开销方法,中频可采用环形缓冲区或异步日志,低频可使用条件打印。调试时应注意减少对原始代码的侵入性影响。
2026-03-14 10:00:47
360
原创 内核驱动调试接口与使用方法入门(转)
本文系统介绍了Linux内核驱动开发中的实用调试方法。首先阐述了内核调试相比用户态程序的特殊挑战,如模块加载失败、中断异常等问题。随后详细讲解了多种调试工具:基础日志(printk规范化输出、频控打印、动态调试开关);debugfs用于实时监控驱动状态;trace_printk用于时序敏感场景;devmem直接读写硬件寄存器;Oops日志分析方法(decode_stacktrace.sh、faddr2line);以及KASAN内存错误检测工具。针对不同调试场景,文章提供了工具选择建议,强调内核调试需要构建完
2026-02-10 22:02:47
696
原创 高性能网络编程:Socket调用与内核协议栈调优(转)
本文深入探讨了高性能网络编程中的Socket调用与内核协议栈调优。Socket作为网络通信的核心接口,其调用方式直接影响系统性能,文章详细解析了Socket基础概念、调用流程和关键要点。同时,剖析了内核协议栈的架构及其对网络性能的影响,包括数据收发流程和协议栈优化策略。针对高并发场景,提出了Socket调用优化方案(I/O模型选择、多线程处理、Socket选项设置)和内核协议栈调优方法(参数调整、缓冲区优化、拥塞控制算法选择)。最后通过电商平台Web服务器案例,展示了优化前后性能的显著提升,为开发者提供了可
2026-02-05 09:16:48
739
原创 linux中backtrace实战
该C程序实现了信号捕获和堆栈跟踪功能,用于调试程序崩溃问题。当程序发生段错误(SIGSEGV)或除零错误(SIGFPE)时,会调用signal_handle函数打印详细的调用栈信息。程序通过backtrace和dladdr函数获取并解析堆栈信息,包括函数名、库文件和偏移量。演示了空指针引用(null_pointer_dereference)和除零操作(division_by_zero)两种常见错误场景。编译时需要-g-rdynamic选项支持堆栈跟踪,-ldl选项支持动态链接库解析。通过objdump和ad
2025-12-12 18:39:41
311
原创 彻底搞懂零拷贝三剑客:sendfile、mmap、splice(转)
本文深入解析Linux系统中三种主流零拷贝技术(sendfile、mmap、splice)的工作原理与适用场景。传统I/O传输存在多次数据拷贝和上下文切换问题,零拷贝技术通过减少CPU拷贝次数显著提升性能。sendfile适用于文件到socket的直接传输,mmap适合大文件处理和进程间共享内存,splice则擅长管道与文件描述符间的数据移动。文章详细对比了三者的性能差异、系统调用特点及实现机制,并给出具体应用场景下的选型建议,帮助开发者在高并发、高吞吐场景中合理运用零拷贝技术进行性能优化。
2026-05-23 16:05:21
380
原创 内核 Panic 不用慌,手把手教你定位根因(转)
在服务器运维、Linux 开发工作中,内核 Panic 是最让人头疼的突发故障。不同于普通程序报错,内核崩溃会直接导致系统卡死、业务中断、服务器自动重启,毫无缓冲空间。很多人遇到这类问题都会手足无措,面对满屏的报错堆栈日志无从下手,只能盲目重启服务器,问题反复出现却始终找不到根源,严重影响线上业务的稳定性。其实绝大多数内核 Panic 并非无迹可寻,大多由驱动异常、内存损坏、锁死、内核 BUG、硬件故障等常见问题引发。
2026-05-16 00:51:25
352
原创 不懂 Core Dump,别说你懂 Linux 程序崩溃排查(转)
Linux程序开发与运维中,CoreDump是诊断程序崩溃的关键工具。本文详细介绍了CoreDump的生成机制、配置方法和分析技巧:1. CoreDump是程序崩溃时的内存快照,包含代码段、堆栈数据、寄存器状态等关键信息;2. 通过ulimit设置core文件大小,配置/proc/sys/kernel/core_pattern定义存储路径;3. 使用GDB加载CoreDump进行分析,结合bt、frame、print等命令定位问题;4. 通过实际案例演示了如何利用CoreDump解决多线程资源竞争导致的崩溃
2026-04-30 09:53:14
446
原创 不懂 Linux 死锁检测,别说你懂内核同步(转)
Linux内核在高并发场景下广泛使用各类同步机制保障共享资源访问安全,但不当使用可能引发死锁。本文系统剖析了死锁产生的四大必要条件(互斥、请求保持、不可剥夺和循环等待),并详细介绍了内核提供的死锁检测工具与方法:1)Lockdep通过锁类跟踪和依赖图分析实时检测潜在死锁;2)gdb和pstack可深入分析线程调用栈定位锁竞争点;3)Ftrace动态追踪锁操作时序。文章通过分布式文件系统死锁案例,展示了从问题定位到修复的完整流程,包括调整锁顺序、引入超时机制等解决方案,为开发者构建了完整的内核同步问题排查体系
2026-04-30 09:51:12
409
原创 不懂信号量与完成量,别说你吃透 Linux 内核同步(转)
本文深入解析Linux内核中的信号量与完成量同步机制。信号量通过计数器控制资源访问,实现进程有序阻塞与唤醒,适用于资源互斥管理;完成量则基于事件通知机制,用于线程间任务完成的同步。文章详细剖析了二者的数据结构、工作原理及典型应用场景:信号量通过P/V操作管理资源,完成量通过wait/complete实现线程同步。通过公交车调度和内核模块实例,展示了完成量的实际应用。开发者需理解二者底层均依赖内核阻塞唤醒机制,但信号量侧重资源计数控制,完成量强调事件通知,正确选择可避免并发隐患,提升系统性能。
2026-04-30 09:47:54
391
原创 一文吃透 mutex 互斥锁,彻底解决 Linux 内核同步难题(转)
Linux内核中的Mutex互斥锁是解决多任务并发访问共享资源的核心同步机制。作为二进制睡眠锁,Mutex通过原子操作和等待队列确保同一时刻仅一个线程进入临界区,有效防止数据竞争和死锁。其三级获取机制(快速路径、乐观自旋、慢速路径)平衡了性能与安全性,无竞争时高效访问,有竞争时合理调度线程休眠。本文从原理到实践全面解析Mutex,包括初始化方式、加锁/解锁操作、死锁预防及性能优化策略,并对比了C++、Go等语言中的实现差异。通过RAII机制和锁粒度控制可避免常见陷阱,是Linux内核开发必备的同步工具。
2026-04-25 17:49:05
388
原创 一文吃透 Spinlock,和内核死锁说再见!(转)
本文深入解析了Linux内核中的Spinlock自旋锁机制。作为基础同步机制,自旋锁通过忙等待实现短时临界区保护,避免了线程切换开销。文章详细剖析了自旋锁的底层实现原理,包括原子操作、内存屏障和自旋循环机制,并系统介绍了内核提供的标准API接口。针对自旋锁可能引发的死锁问题,重点分析了不可重入、优先级反转和中断处理不当等典型场景,给出了规避方法和Lockdep检测工具的使用建议。最后,结合内核链表保护实例,演示了自旋锁在多核高并发、禁止睡眠等场景下的正确使用方法。全文从原理到实践,为开发者提供了全面掌握自旋
2026-04-23 10:15:43
438
原创 使用SRS搭建gb28181服务器
本文介绍了在Ubuntu系统中搭建支持GB28181协议的SRS音视频服务器,并在Windows 10上通过客户端进行连接测试的完整流程。主要内容包括:1)下载并编译SRS 6.0版本源码,配置开启GB28181功能;2)Windows端搭建RTSP服务器作为客户端;3)使用GB28181客户端软件配置参数连接服务器;4)通过SRS管理后台查看推送的视频流。文章
2026-04-22 16:18:38
310
原创 使用live555搭建rtsp服务器
本文介绍了RTSP服务器的搭建与应用场景。在公网环境下,通常需要将本地设备推流至公网RTSP服务器供客户端拉流,但在ONVIF功能等局域网应用场景中,本地RTSP服务器更具实用价值。文章重点讲解了使用live555搭建RTSP服务器的详细步骤:从下载live555源码包、修改配置文件以适应低版本GCC环境,到编译生成可执行文件live555MediaServer。最后通过实例演示了服务器测试方法,包括放置测试视频文件和使用ffplay工具进行拉流验证,展示了本地RTSP服务器的实际应用效果。
2026-04-22 10:11:44
152
原创 ipc onvif服务器搭建测试
ipc上面的onvif功能本质上是一个onvif webservice服务器,一般是通过gsoap生成框架代码来实现的,把gsoap的各种服务器接口实现就可以了,音视频流则是把本地rtsp服务器集成进去gsoap接口。理论上实现起来不复杂,在github上找个库来测试下功能。
2026-04-16 09:59:30
275
1
原创 不懂软中断与tasklet ,别再说你懂 Linux 内核了(转)
本文深入探讨了Linux内核中的软中断与tasklet机制,作为中断处理体系的核心组件。软中断支持并发执行,适合高负载场景如网络数据处理;tasklet则更轻量级,适用于简单任务如设备驱动中的延迟处理。文章通过对比分析二者的实现原理、并发特性和应用场景,揭示了它们在平衡系统性能与响应速度中的关键作用。实战案例展示了软中断在网络通信和tasklet在设备驱动中的具体应用,为开发者提供了选择中断处理机制的实践指导。掌握这两种机制有助于优化内核性能并解决实际开发中的中断相关问题。
2026-04-14 09:18:11
333
原创 git在项目中常用的操作集合
Git常用操作摘要 同步最新代码:git reset --hard origin/main强制同步服务器最新提交 查看暂存修改:git diff --staged查看已add但未提交的改动 分支管理: 强制删除本地分支:git branch -D 分支名 删除远程分支:git push origin --delete 分支名 修改提交信息:git commit --amend -m "新信息" 撤销commit保留修改:git reset --soft HEAD~1 文件提交记录:git
2026-04-08 11:08:43
70
原创 别说你会写 Linux 程序,先搞懂ELF 文件怎么跑起来(转)
摘要:本文深入解析Linux系统中ELF文件的运行机制,揭示从源代码到可执行程序的完整生命周期。ELF作为Linux下统一的可执行文件格式,包含程序运行所需的指令、数据和配置信息。文章详细剖析了ELF文件结构(文件头、节头表、程序头表)、关键节区(.text/.data/.bss)的功能,以及从编译链接到内核加载的动态过程。特别阐述了动态链接原理、内存映射机制和程序启动流程(从_start到main函数),并通过实际案例演示了如何利用readelf/objdump等工具分析ELF文件,定位程序崩溃和内存问题
2026-04-07 17:50:28
351
原创 不懂进程fork/exec与COW,别再说你懂Linux内核了(转)
本文深入剖析Linux进程管理的三大核心机制:fork创建进程、exec执行程序替换和COW写时复制。fork通过复制父进程创建子进程,但采用COW机制延迟内存复制,仅在写入时才真正复制内存页,大幅提升性能。exec则负责加载新程序替换当前进程的内存空间。三者协同工作:fork创建子进程后,exec替换程序执行新任务,COW优化内存使用。这种机制设计使Linux能高效管理进程资源,在保证隔离性的同时最大化资源利用率,是理解Linux进程模型的关键。
2026-04-07 17:44:56
394
原创 不懂伙伴系统与SLUB分配器,别再说你懂Linux内核了(转)
在 Linux 内核的核心架构中,内存管理是撑起整个系统稳定运行的基石,而伙伴系统与 SLUB 分配器,正是这一基石中最关键的两大支柱。很多开发者自诩“懂 Linux 内核”,却对这两个核心组件一知半解,殊不知,脱离了内存分配机制,对内核的理解不过是浮于表面的皮毛。无论是进程创建时的内存分配、内核模块加载时的空间申请,还是系统运行中的内存回收,每一个环节都离不开伙伴系统与 SLUB 分配器的协同工作。
2026-04-07 17:36:48
398
原创 不懂缺页异常与页表遍历,别再说你懂 Linux 内核了(转)
在 Linux 内核的内存体系中,缺页异常与页表遍历是支撑虚拟内存运作的两大核心支柱,也是区分 “内核使用者” 与 “内核精通者” 的关键分水岭。很多人误以为缺页只是 “内存访问错误”,页表遍历只是简单的地址翻译流程,却忽略了它们背后深度耦合的硬件交互逻辑与内核实现细节。从 CPU 的 MMU 硬件触发,到内核的缺页异常处理流程,再到四级页表(PGD→PUD→PMD→PTE)的逐级遍历,每一个环节都藏着内核设计的精妙与复杂,不懂这两者,就无法真正理解 Linux 如何高效管理内存、实现多进程隔离与按需调页。
2026-04-07 16:36:14
372
原创 不懂 MMU,别再说你懂 Linux 内核了(转)
MMU看似是硬件层面的组件,却深度融入Linux内核的每一处内存操作——它负责将进程的虚拟地址翻译成物理地址,实现虚拟内存与物理内存的映射;它提供内存访问权限控制,防止进程越界访问,保障系统稳定性;它还与缓存机制协同,优化CPU读写内存的效率,直接影响系统性能。不懂MMU的工作原理,就无法真正理解Linux内核如何管理内存、如何隔离进程,更谈不上深入调试内核内存相关问题,这样的“懂”,不过是浅尝辄止。
2026-03-31 13:49:22
385
原创 现代linux gpio编程接口(by deepseek)
Linux GPIO操作接口经历了从传统sysfs到现代libgpiod的演进。在Linux 3.x及更早版本中,只能通过/sys/class/gpio文件系统接口操作GPIO,使用echo/cat命令进行控制。而Linux 4.8+版本引入了更高效的字符设备接口/dev/gpiochipX和libgpiod库,提供专用API和命令行工具(gpioinfo/gpioset等)。两种方式的主要区别体现在访问路径、编程接口和内核支持上。对于新项目强烈推荐使用libgpiod,而旧系统则需继续使用sysfs方式,
2026-03-30 15:25:32
446
原创 一文读懂 Linux PCI 驱动:从懂到写就是这么简单(转)
本文深入解析了Linux PCI驱动开发的核心机制与实践方法。文章首先介绍了PCI总线的发展历程和关键技术特点,重点阐述了PCIe总线的高带宽、低延迟等优势。随后详细剖析了Linux PCI驱动框架的三层架构(硬件层、PCI核心层、设备驱动层),并深入讲解了设备枚举与识别、资源管理、驱动注册等核心机制。通过分析pci_dev、pci_driver等关键数据结构,揭示了内核管理PCI设备的实现原理。最后,以一个PCIe SSD驱动开发案例,展示了从设备识别、内存映射到性能优化的完整开发流程,包括中断合并、DM
2026-03-24 14:22:37
379
原创 趣谈网络协议栈,以太网基础MAC和PHY(转)
当我们指尖轻点鼠标浏览网页、发送消息,或是在线追剧、传输文件时,背后总有一套“隐形交通系统”在默默运转,这就是网络协议栈。而以太网,作为这套系统中最基础、最普及的“地面交通网”,承载着我们日常绝大多数的网络通信,MAC与PHY则是这套“地面网”中不可或缺的核心搭档,撑起了以太网通信的半壁江山。很多人提起网络协议,总觉得是晦涩难懂的专业术语,实则不然
2026-02-05 09:11:49
740
2
原创 Linux内核动态跟踪框架ftrace介绍(by deepseek)
摘要:ftrace是Linux内核内置的动态跟踪工具,主要用于内核调试和性能分析。它支持函数跟踪、事件跟踪和动态探针,具有低开销、无需重新编译内核的特点。通过debugfs接口,ftrace可以跟踪内核函数调用、系统调用和调度事件等。虽然主要用于内核空间,ftrace也能通过uprobes和系统调用跟踪间接分析应用程序行为。对于驱动调试,ftrace可跟踪模块函数调用;对于应用分析,它能监控系统调用和关键函数。相比专门的用户空间工具,ftrace更适合内核与应用的交互分析,常与perf、strace等工具配
2026-01-28 18:43:11
918
原创 BPF技术在内核驱动调试中的应用(by deepseek)
BPF 是调试和观测内核驱动(乃至整个 Linux 系统)的颠覆性技术。它允许你以极低的开销,安全、动态地向运行中的驱动注入诊断逻辑,实时捕获函数参数、性能指标、异常行为等关键信息,极大地提升了排查复杂、偶发性驱动问题的效率。如果你要进行内核驱动的开发和调试,学习和掌握 BPF 是当前非常值得投入的方向。可以从bpftrace的简单脚本开始,快速体验其强大能力。本回答由 AI 生成,内容仅供参考,请仔细甄别。我将创建一个简单的字符设备驱动,然后使用 bpftrace 和 BCC 工具来跟踪它的行为。
2026-01-25 16:34:01
819
原创 从内存管理角度看CMA:连续大块内存分配支撑(转)
Linux连续内存分配器(CMA)机制解决了系统运行中内存碎片化导致的大块连续内存分配难题。CMA通过预留特定物理内存区域、空闲时动态复用、设备需要时迁移已占用页面等机制,平衡内存复用与连续分配需求。该机制有效支持显卡、摄像头等外设驱动及DMA传输场景,提高内存利用率的同时确保设备获得所需连续内存。文章详细解析了CMA的工作原理、内存管理逻辑、配置使用方法及实际应用案例,展示了其在嵌入式系统和多媒体处理中的关键作用。CMA机制虽存在内存迁移延迟等局限性,但仍是解决连续大块内存分配问题的核心方案。
2026-01-12 16:53:31
834
原创 从0到1搞懂Linux信号栈,小白也能秒懂!(转)
Linux信号栈是系统为信号处理开辟的独立工作区,确保信号处理逻辑与主程序执行互不干扰。文章从基础概念入手,解释信号栈作为"临时工作区"的作用,分析其工作机制(信号产生、栈切换流程)和典型应用场景(栈溢出保护、实时信号处理等)。通过代码示例演示如何配置信号栈,并讨论其在系统稳定性、进程通信和性能优化方面的重要性。文章采用通俗比喻和实战案例,帮助读者理解这个Linux底层机制的核心概念,为深入系统编程打下基础。
2026-01-12 16:46:51
729
原创 git查看远程仓库地址和重定向到新地址(by deepseek)
Git查看和修改远程仓库地址的方法: 查看远程仓库地址: 使用git remote -v查看所有远程仓库地址 使用git remote show origin查看指定仓库详情 修改远程仓库地址: 当服务器IP变更时,使用git remote set-url origin 新地址更新 示例:将192.168.120.218改为192.168.140.100 修改后可通过git remote -v验证 其他相关操作: git fetch测试连接 多个远程仓库需分别修改 确保新地址可访问且端口正确 常用命令简洁明
2026-01-08 09:47:13
871
原创 popen的使用
摘要:popen()是C标准库函数,用于创建管道并执行shell命令,实现父子进程间单向通信。其语法为FILE* popen(const char* command, const char* mode),支持读取("r")或写入("w")模式。典型应用包括读取命令输出(如ls -l)或向命令输入数据(如grep)。需注意:1) 使用pclose()关闭管道;2) 存在shell注入风险,需清理用户输入;3) 仅支持单向通信,双向通信需改用pipe()+fork()。适
2026-01-07 16:00:30
380
原创 嵌入式中websocket和mqtt的场景对比(deepseek教我学嵌入式)
WebSocket与MQTT协议对比及应用场景分析 WebSocket和MQTT都是基于TCP的实时通信协议,但设计目标和应用场景不同。WebSocket是通用双向通信协议,提供原始数据通道,适合点对点实时交互;MQTT是专为物联网设计的发布/订阅消息协议,支持主题路由和多设备通信。 核心区别: 通信模型:WebSocket是点对点,MQTT采用发布/订阅 数据格式:WebSocket无限制,MQTT有固定报文格式 QoS:MQTT内置三级服务质量,WebSocket需自行实现 应用场景选择: WebSoc
2025-11-20 17:52:05
160
原创 Linux内核KGDB进阶:源码级调试实战演练(转)
不同于入门级的环境搭建,本文聚焦KGDB进阶实战:从串口调试到网络调试的切换技巧,多核环境下断点绑定核心的关键操作,再到驱动模块动态加载后的符号匹配难题,全是一线开发中高频遇到的场景。我们会以真实的网卡驱动异常案例为线索,演示如何用KGDB定位中断处理函数的逻辑漏洞,如何通过观察寄存器状态还原问题现场。无论你是刚接触内核调试的新手,还是被复杂问题困住的资深开发者,这份实战指南都能帮你打通KGDB使用的“任督二脉”,让内核调试不再靠“猜”。
2025-11-17 23:11:40
925
原创 C++原子操作实战:无锁数据结构的实现技巧(转)
本文深入探讨了C++原子操作在多线程编程中的应用与性能优化。文章首先通过比较普通变量与原子变量在高并发场景下的表现,展示了原子操作如何有效解决数据竞争问题。随后详细介绍了std::atomic类模板及其内存模型,包括memory_order_relaxed、memory_order_release等不同级别的顺序保证,并分析了原子操作在硬件层面的实现原理和性能考虑。重点通过无锁队列和栈的实现案例,解析了如何利用CAS(Compare-And-Swap)操作构建高性能的无锁数据结构,相比传统锁机制可显著减少线
2025-11-17 23:09:45
959
原创 c++中shared_from_this的用法(deepseek教我学c++)
摘要:std::enable_shared_from_this和shared_from_this()用于解决在对象内部安全获取自身shared_ptr的问题。直接使用this构造新shared_ptr会导致双重删除,而通过继承enable_shared_from_this并调用shared_from_this(),可获取与外部shared_ptr共享控制块的指针。使用时需确保对象已被shared_ptr管理,且不能在构造函数或栈对象上调用。典型应用包括异步回调、生命周期管理和链式调用等场景。
2025-09-15 15:12:10
968
原创 瑞芯微rv1126 linux内核使用spidev驱动
本文介绍了在Linux系统中通过spidev驱动框架操作SPI设备的方法。主要内容包括:1) 配置内核支持spidev驱动;2) 修改设备树将SPI设备绑定到spidev驱动;3) 编译测试工具spidev_test并修改其显示功能;4) 通过开发板测试读取ICM20608传感器数据。测试结果表明,使用spidev_test工具成功读取到传感器寄存器0x75的数据0xAE,验证了该方法的可行性。该方法无需编写内核驱动,直接在用户空间即可操作SPI设备。
2025-09-03 16:02:19
961
原创 完美转发 std::move和std::forward(转)
摘要:本文深入解析了C++中的std::move和std::forward机制。std::move用于将左值无条件转换为右值引用,优化资源转移,减少拷贝开销。std::forward则实现完美转发,保持参数的左右值属性不变,通过引用折叠规则确保转发过程中类型正确传递。通过类A的示例演示了移动构造函数和拷贝构造函数的区别,说明std::forward在转发右值引用时避免隐式转换为左值的关键作用。两者配合使用能显著提升C++程序的性能表现。
2025-08-26 09:32:48
808
原创 std::move 与 std::forward 的区别(转)
文章摘要:本文深入解析C++中的左值、右值概念及其相关工具std::move与std::forward。左值是有固定内存地址的持久对象,右值则是临时对象。std::move用于将左值强制转换为右值引用以启用移动语义,实现资源高效转移;std::forward则用于模板函数中完美转发参数,保持其原始值类别。两者虽同属C++11特性,但功能不同:std::move是无条件转换,std::forward是有条件转发。通过对比分析,文章阐明了它们在移动语义和完美转发中的具体应用场景及注意事项。
2025-08-26 08:53:14
757
原创 Epoll原理剖析:为什么它是高并发的王者?(转)
Epoll技术原理与性能优势分析 核心机制: 事件驱动架构:采用回调机制,仅当文件描述符状态变化时触发通知,避免无效轮询,显著减少系统开销。 高效数据结构: 红黑树管理注册的fd(O(logN)操作复杂度) 双向链表维护就绪队列,epoll_wait只需遍历活跃连接 零拷贝优化:通过mmap共享内存减少内核态与用户态数据拷贝。 性能对比: 相比select/poll的O(n)遍历,epoll时间复杂度为O(1) 支持百万级并发连接,突破select的1024fd限制 实测吞吐量可达select的5倍以上(1
2025-08-06 21:49:06
665
原创 告别内存烦恼,C++智能指针来救场(转)
C++智能指针解析:内存管理的现代解决方案 本文深入探讨C++智能指针技术,分析其在内存管理中的核心优势。通过对比传统手动内存管理易导致的内存泄漏、悬空指针等问题,详细介绍了三种主要智能指针类型:std::unique_ptr(独占所有权)、std::shared_ptr(共享所有权)和std::weak_ptr(解决循环引用)。文章阐述了智能指针的RAII机制和引用计数原理,并通过文件处理、游戏角色管理等实际案例展示其应用场景。同时指出智能指针的性能考量,建议在不需要共享资源时优先选用std::uniqu
2025-08-06 21:46:20
954
libpeer所有依赖代码的一次性下载包
2026-05-26
keil Compiler Version 5:ARMCompiler-506-Windows-x86-b960
2024-08-29
Orcad10.3 免安装精简版+可用lic
2024-07-02
Microsoft.HEVCVideoExtension-2.1.451.0-neutral
2024-02-18
易兆微yc1021源码
2019-03-22
嵌入式二维码显示方案,附源码
2018-04-11
source insight 4.0最新版加破解文件
2017-10-31
unicode转gb2312码表
2018-04-02
nxp nfc天线pcb匹配参数设计工具AntennaTool
2020-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅