自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 搞定 Linux内存难题,Kasan 工具这样用

你或许试过用 GDB 断点调试,却卡在复杂调用栈里绕不出来;也可能用 Valgrind 检测,却受限于性能无法在生产环境使用。其实 Linux 内核早就自带一款 “内存侦探”——Kasan,能精准揪出越界访问、使用已释放内存、内存泄漏等常见问题,甚至能定位到具体代码行。

2025-11-05 14:47:09 670

原创 从0到1,带你吃透TCP/IP协议

网络世界同样如此,各种设备要实现通信和数据传输,也得遵循特定规则,这就是网络协议。而 TCP/IP 协议,堪称网络世界的 “交通规则” 和 “点餐流程”,是互联网得以正常运转的核心所在。 接下来,让我们深入探寻 TCP/IP 协议的奥秘,看看它究竟如何支撑起庞大复杂的网络世界。

2025-11-05 14:44:50 988

原创 拆解Linux内核架构:从原理到核心模块

Linux内核作为操作系统的核心,扮演着硬件与软件间的关键桥梁角色。本文深入解析Linux内核的核心架构与实现原理,涵盖进程管理、内存管理、文件系统、网络协议栈等核心模块的交互机制。文章首先介绍内核的基本概念与源码目录结构,随后详细拆解各子系统的功能实现,包括进程调度算法、内存分页机制、VFS抽象层等关键技术。此外,还阐述了内核模块的动态管理方法,并提供了系统性的学习路径建议,从入门到实践的工具选择及经典书籍推荐,帮助开发者构建完整的内核知识体系,更好地理解Linux系统的底层运作机制。

2025-11-05 13:59:48 1629

原创 彻底搞懂零拷贝:提升系统性能的关键技术

零拷贝技术:提升系统性能的关键 零拷贝(Zero-Copy)技术通过减少数据在用户空间与内核空间之间的冗余拷贝,显著提升系统性能。传统数据传输需多次CPU拷贝和上下文切换,而零拷贝借助DMA(直接内存访问)和PageCache(页缓存)等机制,实现数据在内核空间的直接传输,避免不必要的CPU干预。 核心实现方式: mmap+write:将文件映射到内存,减少一次CPU拷贝。 sendfile:数据直接从磁盘到网络缓冲区,支持SG-DMA实现零CPU拷贝。 splice/tee:在内核空间管道间高效传输数据。

2025-07-19 20:09:14 1582

原创 从丢包到恢复:TCP重传机制的底层逻辑全解

本文深入解析了TCP协议中的重传机制及其在网络通信中的关键作用。文章首先分析了网络丢包现象的多种成因及其负面影响,随后详细介绍了TCP重传机制的核心组件:基于时间驱动的超时重传、基于数据驱动的快速重传,以及更精准的选择性确认(SACK)和重复选择性确认(D-SACK)。文章进一步探讨了TCP保障可靠性的底层逻辑,包括确认应答、序列号和校验和等机制,并阐述了Karn算法等优化策略。最后,文章分析了重传机制在不同网络环境下的表现差异,并提出了参数调整、算法改进和网络配置优化等提升性能的策略。TCP重传机制通过精

2025-07-19 20:03:58 899

原创 解锁C++性能密码:TCMalloc深度剖析

摘要:TCMalloc是Google开发的高性能内存分配器,专为优化C++程序性能而设计。它采用三级缓存架构(ThreadCache、CentralCache和PageHeap),通过线程本地缓存减少锁竞争,显著提升多线程环境下的内存分配效率。与传统内存管理相比,TCMalloc能减少内存碎片,提高内存利用率,在测试中速度提升可达3倍。其核心创新包括按对象大小分类处理、基于Page和Span的内存管理机制,以及灵活的配置选项。安装方式支持源码编译和包管理器安装,通过简单链接即可替换标准内存管理函数。TCMa

2025-07-19 20:01:16 1375

原创 Linux惊群效应解析,让性能不再 “浪费”

Linux惊群效应是指多个进程/线程同时阻塞等待同一事件时,内核会唤醒所有等待者,但最终只有一个能成功处理事件,其余被迫重新阻塞。这种现象会导致无效的上下文切换和锁竞争,严重损耗系统性能。常见场景包括accept、epoll和poll/select等系统调用。解决方案包括:1)使用EPOLLEXCLUSIVE标志;2)SO_REUSEPORT负载均衡;3)线程池模型;4)优化唤醒机制。研究表明,Linux内核版本演进中已逐步解决部分惊群问题,如accept在2.6版本后优化,但epoll在LT模式下仍存在该

2025-07-15 16:57:59 643

原创 内核视角看Epoll LT/ET:数据结构与回调机制全解

作为高性能I/O多路复用技术,Epoll通过红黑树管理文件描述符,使用双向链表存储就绪事件,其核心优势在于高效的事件通知机制。文章详细对比了水平触发(LT)和边缘触发(ET)两种模式:LT模式会持续通知未处理事件,编程简单但效率较低;ET模式仅在状态变化时触发一次,性能更高但需配合非阻塞I/O确保数据完整读取。此外,文中剖析了Epoll的回调机制如何将就绪事件加入链表,并给出应用场景选择建议:LT适合简单服务,ET适用于高并发系统。

2025-07-15 16:55:22 1289

原创 深度解读virtio:Linux IO虚拟化核心机制

Virtio是Linux I/O虚拟化的核心技术,通过半虚拟化架构在虚拟机与物理设备间建立高效通路。其核心设计采用环形缓冲区和虚拟队列机制,前端驱动与后端处理程序通过共享内存实现零拷贝数据传输,避免了传统虚拟化的性能瓶颈。Virtio包含四层架构:前端驱动负责请求封装,virtio层定义通用接口,virtio-ring实现环形缓冲区,后端程序完成硬件操作。关键优化包括批量处理、中断合并和DMA技术,使I/O性能接近原生系统。作为KVM/QEMU的默认方案,V

2025-07-14 22:28:30 1977

原创 Linux连接跟踪Conntrack:原理、应用与内核实现

连接跟踪(Conntrack)是网络通信的核心机制,通过记录连接状态确保网络应用高效稳定运行。其工作原理包括:1. 在数据包入口处提取五元组信息建立跟踪记录,出口处确认状态;2. 与Netfilter框架深度集成,在Linux内核中实现连接状态管理。典型应用场景包括:1. NAT地址转换时提供连接映射支持;2. 状态防火墙进行智能流量过滤;3. 特殊协议(如FTP)的应用层网关处理。内核实现采用哈希表存储nf_conn结构,通过精细的生命周期管理(创建-确认-更新-删除)维护连接状态。现代方案如Cilium

2025-07-14 22:22:56 1079

原创 从LRUCache到C++:解锁缓存世界的神秘代码

摘要:LRUCache(最近最少使用缓存)是一种高效的缓存替换策略,通过优先淘汰长时间未访问的数据来提升缓存命中率。本文详细解析了LRUCache的实现原理,包括其核心数据结构哈希表(快速查找)和双向链表(维护访问顺序),并展示了用C++实现的完整代码方案。文章还提供了测试用例验证功能正确性,分析了O(1)时间复杂度特性,并探讨了内存池优化等性能提升方法。该技术广泛应用于操作系统、数据库和浏览器等领域,显著提升系统响应速度。

2025-07-11 16:18:11 941

原创 深入C++完美转发:解锁高效编程的密码

本文深入探讨了C++11引入的完美转发技术,这一特性能够完整保留参数的左值/右值属性及const/volatile修饰符。文章首先通过对比普通转发存在的问题,揭示了完美转发的必要性;随后详细解析其实现原理,包括右值引用、std::forward工具和引用折叠规则;接着展示了完美转发在通用工厂函数、包装函数和延迟构造等场景的应用;最后总结了注意事项和实际案例。完美转发解决了模板编程中参数传递的类型信息丢失问题,为编写高效通用代码提供了关键技术支撑。

2025-07-11 16:15:14 858

原创 Linux NUMA调优实战:多线程程序加速方法

NUMA架构优化实战指南 摘要:本文深入探讨了NUMA架构下多线程程序的性能优化方法。首先解析了NUMA与UMA架构的本质区别,指出NUMA通过节点化设计解决传统SMP架构的内存总线瓶颈问题。文章详细介绍了Linux内核中的NUMA实现机制,包括节点组织结构与内存分配策略,并提供了numactl、numastat等实用工具的配置方法。通过进程绑定、内存分配策略调整、大页使用等具体优化手段,有效减少跨节点内存访问带来的性能损耗。最后强调性能监控的重要性,建议使用top、perf等工具验证优化效果。本文为开发高

2025-07-08 21:29:50 1138

原创 当DMA想“越狱”:IOMMU怎么硬核拦截?

IOMMU(输入输出内存管理单元)是计算机系统中抵御DMA安全威胁的关键防线。它通过地址重映射和访问控制两大核心技术,有效拦截恶意设备的越权访问。在虚拟化环境中,IOMMU为设备直通提供安全隔离,确保虚拟机间的内存访问界限。其工作原理包含多级页表翻译、权限校验及IOTLB缓存加速,既保障安全性又维持高性能。当前主流架构(Intel VT-d/AMD-Vi/ARM SMMU)均实现IOMMU支持,通过内核API和VFIO框架为系统提供编程接口。随着云计算发展,I

2025-07-08 21:27:42 1872

原创 C++多线程网络编程:助力高并发服务器性能提升

本文深入探讨了C++多线程网络编程在高并发服务器开发中的关键应用。首先介绍了线程与进程概念,以及C++11线程库的使用方法;接着详细讲解了套接字编程和网络协议原理,包括TCP/IP协议的三次握手过程。在实践部分,重点阐述了多线程服务器架构设计、线程同步机制(互斥锁、条件变量)、并发控制策略(无锁数据结构、读写锁)和I/O多路复用技术(select/poll/epoll)。最后通过实现一个高并发聊天服务器案例,展示了线程池、用户管理和消息路由等功能的代码实现,并分析了性能优化方法。全文系统性地呈现了C++多线

2025-07-07 22:21:07 992

原创 Linux内核ext4 extent:解决大文件存储难题的关键

本文深入解析了ext4文件系统的核心机制——extent。与传统ext2/ext3的直接+间接寻址相比,extent通过连续块组存储数据,显著提升了文件系统的性能。文章从历史演进角度,对比了ext2、ext3的寻址缺陷与ext4的改进,详细剖析了extent的核心数据结构(inode、extent结构体、extent_tree)及其运行机制(文件创建、读写、删除)。通过内核源码分析,揭示了extent如何优化磁盘空间利用率、减少碎片化、提高I/O效率,特别在处理大文件时表现出显著优势。extent机制体现了

2025-07-07 22:18:25 979

原创 从源码到实践:彻底剖析Linux进程负载均衡机制

Linux内核CPU负载均衡机制在多核系统中发挥着关键作用,主要通过调度域和调度组层级结构实现不同CPU间的任务迁移。本文系统性地介绍了负载均衡的核心概念(包括CPU负载定义、算力评估和均衡原则)、触发机制(周期性检查和新任务创建等)以及实现方式(针对CFS和RT任务的不同策略)。文章还深入分析了中断负载均衡的实现,并探讨了异构计算系统中misfit任务处理等特殊场景。该机制通过智能调度避免了单核过载,显著提升了多核系统的资源利用率和整体性能。

2025-07-05 17:15:00 1218 1

原创 深入理解Linux内核进程的创建、调度和终止

Linux进程管理探秘:创建、调度与终止 摘要:本文深入剖析Linux内核中的进程生命周期管理机制。进程作为系统资源分配的基本单位,其管理涉及task_struct结构体、进程状态转换等核心概念。文章详细解析了三种进程创建方式(fork、vfork、clone)的实现原理,重点阐述了写时拷贝技术如何优化fork性能。在调度机制方面,介绍了CFS完全公平调度算法通过vruntime虚拟时间实现公平性,以及实时调度策略的区别。最后探讨了进程终止的流程,包括僵尸进程的产生与避免策略。通过案例分析展示了CFS如何利

2025-07-05 09:15:00 653

原创 一文吃透Linux同步管理,让你的系统稳如泰山

中断是指计算机在执行程序的过程中,当出现某些紧急事件时,暂时停止当前程序的执行,转去处理这些事件,处理完毕后再返回原来的程序继续执行。比如,当有新的数据到达网络接口卡时,会产生一个中断信号,通知 CPU 进行处理。抢占则属于进程调度的概念,Linux 内核从 2.6 版本开始支持抢占调度。通俗地讲,抢占就是一个正在 CPU 上愉快运行的任务(可以是用户态进程,也可以是内核线程)被另一个通常是更高优先级的任务夺去 CPU 执行权。中断和抢占之间有着密切的关系,抢占依赖中断。

2025-07-04 15:15:00 670

原创 实战演练:设备树(DTS)语法详解 + LED控制实战

本文深入解析了嵌入式开发中的设备树(DeviceTree)技术,从基础概念到实战应用全面覆盖。首先介绍了设备树诞生的背景及其在ARM架构中的引入过程,解释了DTS、DTB、DTC等关键术语。然后详细剖析了设备树语法结构,包括节点定义、属性类型、包含文件机制等核心技术要点。通过GPIO、LED等具体实例,展示了设备树节点与驱动程序的匹配机制,并提供了自定义设备树节点与驱动开发的完整示例。文章还深入讲解了节点路径、别名、复合节点等高级特性,帮助开发者理解复杂硬件关系的描述方法。全文贯穿实践导向,为嵌入式开发者提

2025-07-04 10:30:00 2200

原创 三种经典映射策略,从理论到项目实践

本文深入解析了计算机缓存系统的三种关键映射方式:直接映射、全相联映射和组相联映射。直接映射采用固定位置分配,硬件简单但冲突率高;全相联映射允许数据自由存储,灵活性高但实现复杂;组相联映射则通过分组策略平衡了前两者的优缺点,成为现代处理器的首选方案。文章通过生动的"大厨备餐"比喻,详细阐述了各映射方式的工作原理、地址格式、性能特点及适用场景,并以Intel处理器缓存设计为例,展示了组相联映射的实际应用。最后指出,映射方式的选择需综合考虑成本、性能和缓存大小等因素,组相联映射因其优异的平衡性

2025-07-03 15:16:45 810

原创 程序为何不越界,内存管理单元MMU全解析

MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换(bank switching,尤其是在8位的系统上)。

2025-07-03 14:29:28 1730

原创 内存问题克星:VSCode GDB调试全攻略

摘要:本文详细介绍了如何使用VSCode与GDB进行高效的C/C++代码调试。从环境搭建(VSCode、GDB安装和C/C++扩展配置)到调试配置(launch.json和tasks.json文件设置),再到基础调试操作(断点设置、变量查看、单步执行等)和高级技巧(条件断点、多线程调试、远程调试),全面覆盖调试的各个环节。文章还针对常见问题提供了解决方案,帮助开发者快速掌握这一强大调试工具组合的使用方法,提升代码调试效率和质量。通过本文的指导,开发者可以更从容地定位和修复程序问题,深入理解代码执行逻辑。

2025-07-03 14:25:07 1539

原创 Linux缓存调优指南:提升服务器性能的关键策略

摘要: 本文全面介绍了Linux缓存机制及其调优方法。首先解释了缓存作为数据"中转站"的工作原理,重点分析了页缓存和inode缓存的不同作用。通过cachestat、cachetop等工具可监控关键性能指标如缓存命中率。调优方法包括调整内核参数(vm.swappiness、vm.dirty_ratio)、适时清理缓存(/proc/sys/vm/drop_caches)和优化应用程序访问模式。文章还通过真实案例,展示了如何通过多管齐下的策略

2025-07-02 14:20:24 1004

原创 深入解剖io_uring:Linux异步IO的终极武器

摘要:本文深入探讨了Linux I/O模型的演进历程,从早期阻塞式I/O到现代高性能异步I/O框架io_uring的发展。重点分析了io_uring的设计理念、核心机制以及与epoll等传统模型的对比。io_uring通过共享环形缓冲区实现用户态与内核态高效通信,支持批量操作和零拷贝技术,显著提升了I/O性能。文章详细解析了io_uring的工作原理、系统调用接口,并通过文件读写和网络编程案例展示其应用方式。测试结果表明,在高并发场景下,io_uring的性能表现优于传统I/O模型。最后讨论了使用io_ur

2025-07-02 14:17:32 1416

原创 C++高并发三板斧:多进程、多线程、IO多路复用

本文介绍了C++并发编程中的三种核心技术:多进程、多线程和IO多路复用。多进程通过fork()创建独立进程,适合高稳定性需求但开销较大;多线程使用std::thread实现资源共享,需注意同步问题;IO多路复用(select/poll/epoll)则高效管理大量I/O操作,适用于高并发场景。三种技术各有优势:多进程提供隔离性,多线程提升响应速度,IO多路复用优化资源利用率。开发者应根据具体需求选择合适方案,平衡性能与复杂度。

2025-07-02 14:11:06 1155

原创 高并发场景下,TCP/UDP丢包的隐藏陷阱

本文深入分析了TCP和UDP协议在网络传输过程中出现丢包问题的根本原因及解决方案。在TCP方面,丢包可能源于应用层程序处理不当、网络状况不佳、TCP自身机制局限以及三次握手异常;UDP丢包则主要由其无连接特性、缓冲区问题和发送策略不当导致。针对不同协议的特性,文章提出了针对性的优化方案:TCP可通过优化程序逻辑、调整重传参数和拥塞控制算法来改善;UDP则建议采用FEC技术、应用层重传机制、优化接收处理和合理设置socket参数等方法。文章为构建稳定高效的网络连接提供了全面实

2025-07-01 14:12:16 1297

原创 解锁C++异步编程:告别阻塞,拥抱高效

【摘要】本文系统介绍了C++中的异步编程技术及其应用场景。文章首先通过同步与异步的对比,阐明异步编程避免阻塞、提升效率的核心优势。随后详细解析了C++标准库提供的四大异步工具:std::async(异步任务启动器)、std::future(结果获取接口)、std::promise(线程间值传递)和std::packaged_task(可调用对象封装器)。通过文件读取和多线程数据处理两个典型案例,展示了异步编程在I/O密集型与计算密集型任务中的实践方法,包括性能对比分析和线程同步解决方案。最后指出合理使用异步

2025-07-01 14:06:44 1237

原创 告别内存分配烦恼,定长内存池来“救场”

《高效内存管理方案:定长内存池原理与实现》 摘要: 本文探讨了常规内存分配方式(如new/malloc)在频繁操作中导致性能下降和内存碎片化的问题。通过类比酒店房间管理,阐释了定长内存池的核心原理:预先申请大块内存并按固定大小切分,通过空闲链表管理内存块的分配与回收。文章详细解析了关键数据结构(空闲链表、内存池结构体)和核心操作(初始化、分配、释放),并提供了C++实现代码示例。性能测试表明,定长内存池在10万次操作中耗时仅350ms,相比系统分配的1200ms具有显著优势,特别适合游戏粒子、网络数据包等频

2025-07-01 14:01:57 772

原创 Linux内存分页机制:解锁高效内存管理方式

分页机制是 80x86 内存管理机制的第二部分。它在分段机制的基础上完成虚拟地址到物理地址的转换过程。分段机制把逻辑地址转换成线性地址,而分页机制则把线性地址转换成物理地址。分页机制可用于任何一种分段模型。处理器分页机制会把线性地址空间划分成页面,然后这些线性地址空间页面被映射到物理地址空间的页面上。分页机制的几种页面级保护措施,可和分段机制保护措施或用或替代分段机制的保护措施。(1)pgd_t、pmd_t、pud_t和pte_t。

2025-05-03 09:15:00 867

原创 Linux操作系统系统编程:x86-64架构下的系统调用

read()系统调用是一个很好的初始示例,可以用来探索内核的系统调用机制。它在fs/read_write.c中作为一个简短的函数实现,大部分工作由vfs_read()函数处理。从调用的角度来看,这段代码最有趣的地方是函数是如何使用SYSCALL_DEFINE3()宏来定义的。实际上,从代码中,甚至并不立即清楚该函数被称为什么。fdput(f);return ret;这些SYSCALL_DEFINEn()宏是内核代码定义系统调用的标准方式,其中n后缀表示参数计数。

2025-05-02 17:15:00 2184

原创 Linux Netlink机制:现代网络通信的核心

Netlink 套接字是实现用户进程与内核进程通信的一种特殊的进程间通信(IPC)方式,也是网络应用程序与内核通信的最常用接口。它是 Linux 所特有的一种特殊 socket,类似于 BSD 中的 AF_ROUTE,但功能远比其强大。在最新的 Linux 内核(2.6.14 及以后版本)中,有众多应用借助 netlink 实现应用与内核的通信。从本质上讲,Netlink 是一种在内核与用户应用间进行双向数据传输的机制。

2025-05-02 09:15:00 947

原创 透视Linux内核:深度剖析Socket机制的本质

在网络编程的广袤世界里,Socket(套接字)是一个极为重要的概念。简单来说,Socket 是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。从本质上讲,它是应用层与 TCP/IP 协议族通信的中间软件抽象层,是一组接口,把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面,让开发者只需面对一组简单的接口,就能实现网络通信。就如同我们日常使用电话,无需了解电话线路复杂的电路原理和信号传输机制,只要拿起听筒拨号,就能与远方的人通话,Socket 就是这样一个方便我们进行网络通信的 “听筒”

2025-05-01 17:00:00 910

原创 腾讯二面追问epoll,它凭啥性能一骑绝尘?

在深入了解 epoll 之前,我们先来理解一下 IO 多路复用的概念。在网络编程中,我们常常会遇到这样的场景:一个服务器需要处理多个客户端的连接和数据传输。如果采用传统的方式,为每个客户端连接创建一个单独的线程或进程来处理,那么当客户端数量增多时,系统资源会被大量消耗,性能也会急剧下降。IO 多路复用就像是一个 “万能助手”,它可以让一个线程来处理多个 I/O 流。打个比方,你开了一家餐厅,来了很多桌客人。如果每个客人都安排一个服务员专门服务,那成本可太高了。

2025-05-01 12:15:00 815

原创 告别内存碎片化,C++内存池让程序飞起来

内存池是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。在内核中有不少地方内存分配不允许失败,作为一个在这些情况下确保分配的方式,内核开发者创建了一个已知为内存池(或者是 "mempool" )的抽象, 一个内存池真实地只是一类后备缓存,它尽力一直保持一个空闲内存列表给紧急时使用。

2025-05-01 10:15:00 1186

原创 解锁Windows异步黑科技:IOCP从入门到精通

在当今快节奏的数字化时代,软件应用对性能的追求可谓永无止境。无论是高并发的网络服务器,还是需要快速处理大量文件的桌面应用,都面临着一个共同的挑战:如何在有限的系统资源下,实现高效的数据输入输出(I/O)操作。在 Windows 操作系统的广袤世界里,有一种神秘而强大的异步机制 ——IOCP(Input/Output Completion Port,输入输出完成端口),如同隐藏在幕后的超级英雄,默默为无数高性能应用提供着强大的支持。

2025-04-30 14:45:00 1445

原创 一文搞懂POSIX多线程:解锁高性能编程的密码

线程,作为进程内的执行单元,可以理解为进程这个大舞台上的一个个小舞者,各自有着独立的舞步(执行路径),却又共享着舞台的资源(进程资源)。与进程相比,线程更加轻量级。进程是系统进行资源分配和调度的基本单位,拥有独立的地址空间、内存、文件描述符等资源 ,进程间的切换开销较大。而线程则是共享所属进程的资源,它们之间的切换开销相对较小,就像在同一个舞台上不同舞者之间的快速换位,无需重新搭建整个舞台。线程的这些特点,使得多线程编程在提升程序执行效率上有着独特的优势。

2025-04-30 11:30:00 726

原创 扒开TCP的“神秘外衣”,一文吃透它的本质!

TCP(传输控制协议)是一种常用的网络通信协议,它位于OSI模型的传输层。TCP提供可靠的、面向连接的数据传输服务。它通过使用序列号、确认应答和重传机制,保证数据在网络中的可靠传输。TCP还具有流量控制和拥塞控制功能,以确保发送方不会压倒接收方和网络。TCP协议是基于IP(Internet Protocol)协议之上构建的,它负责将应用程序分割成小块(称为报文段),并对这些报文段进行排序、重组和传输。

2025-04-30 07:15:00 855

原创 一文搞懂高效并发编程:无锁编程的秘密与实战

无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization),实现非阻塞同步的方案称为“无锁编程算法”。为什么要非阻塞同步,使用lock实现线程同步有非常多缺点:产生竞争时,线程被阻塞等待,无法做到线程实时响应dead locklive lock优先级反转使用不当,造成性能下降假设在不使用 lock 的情况下,实现变量同步,那就会避免非常多问题。

2025-04-29 10:15:00 812

原创 解锁Linux共享内存:进程间通信的超高速通道

在Linux系统的进程间通信 “江湖” 中,众多通信方式各显神通。管道,如同隐秘的地下通道,让有亲缘关系的进程能够悄然传递信息;消息队列则似邮局,进程可投递和接收格式化的消息包裹。然而,有一种通信方式却以其独特的 “高速” 特性脱颖而出,它就是共享内存。想象一下,进程们原本各自生活在独立的 “小天地” 里,有着自己专属的虚拟地址空间。但共享内存却如同神奇的 “任意门”,打破了进程间的隔阂,让多个进程能够直接访问同一块内存区域。

2025-04-29 09:00:00 1136

空空如也

空空如也

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

TA关注的人

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