自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork

本文详解多线程TCP服务器的实现原理,重点解析线程共享文件描述符表的特性及其影响,强调工作线程不可随意关闭监听fd。通过ThreadData结构封装连接信息,避免局部变量访问问题,并采用pthread_detach实现线程分离。结合回调机制解耦网络收发与业务逻辑,指出TCP为字节流协议,需设计应用层协议以保证消息边界。最后给出完整多线程服务器框架,兼顾可扩展性与安全性。

2026-11-07 21:05:09 70 4

原创 【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork

本文详解多进程TCP服务器的实现原理,从单进程并发瓶颈出发,通过fork分离连接接收与服务职责。重点解析文件描述符继承机制、僵尸进程问题及双重fork解决方案,最终构建高效、稳定的多进程服务器模型,并说明服务器重启时可能因端口未释放导致绑定失败的原因。

2026-11-05 00:10:45 2331 40

原创 【Linux网络】TCP 服务器怎么写?从 listen、accept 到 read/write,手写完整 Echo Server

本文详解TCP服务器基础流程:通过socket创建套接字,bind绑定地址端口,listen进入监听状态,再用accept从连接队列中取出已完成连接,并返回新通信文件描述符用于读写。重点解析了accept的作用——并非建立连接,而是获取已由内核完成三次握手的连接;同时说明了read在字节流中的三种返回情况(数据、EOF、错误),强调TCP无边界特性需应用层自行处理。结合telnet测试验证连通性,为后续实现高效并发服务器奠定基础。

2026-11-05 00:06:23 300

原创 【Linux网络】UDP 聊天室怎么实现?从在线用户管理、消息广播到双线程收发与线程池

本文介绍基于UDP的聊天室实现,重点解决从“请求-响应”到“消息广播”的转变。服务器需维护在线用户列表(以InetAddr封装地址),通过erase-remove策略管理用户上线/下线,并将消息路由至所有在线客户端。客户端采用双线程模型:一负责发送,一持续接收。引入线程池后,需同步保护共享的在线表,确保数据安全。代码结构清晰,复用已有线程与网络封装,突出应用层协议设计与并发处理。

2026-11-01 21:30:23 1435 43

原创 【Linux网络】UDP 程序怎么继续封装?从 UdpSocket、回调到网络字典服务器

本文通过封装UDP Socket,将网络通信与业务逻辑解耦。作者将socket、bind、recvfrom、sendto等操作抽象为UdpSocket类,实现创建、绑定、收发及关闭功能,并利用inet_pton和inet_ntop处理IP地址转换。结合回调机制,服务器仅需关注“收到请求后如何响应”,提升代码复用性与可维护性,便于后续扩展查字典、表达式计算等业务。

2026-11-01 20:54:18 383 20

原创 【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器

本文详解UDP回显服务器的实现流程,涵盖socket、bind、recvfrom、sendto四大核心接口。重点解析服务器必须显式绑定端口以提供稳定访问入口,使用INADDR_ANY实现多网卡兼容;强调UDP无连接特性下recvfrom同时获取数据与客户端地址的必要性。通过完整代码示例,揭示数据报往返机制,为后续封装网络通信打下基础。

2026-10-28 08:58:28 3036 26

原创 【Linux网络】Socket 编程前要搞懂什么?从 IP、端口到字节序与 sockaddr,一次理清网络通信基础

本文系统梳理了网络通信的核心预备知识:IP地址定位主机,端口号在主机内定位进程,二者共同构成网络端点;端口号不可用PID替代,因其作用范围广、稳定性高且与协议解耦。一次完整通信由四元组(源IP、源端口、目的IP、目的端口)唯一标识。传输层协议中,TCP提供可靠连接,UDP为无连接传输。所有通信通过内核的Socket对象管理,其本质是文件描述符,实现“一切皆文件”的统一接口。理解这些概念,是掌握Socket编程的基础。

2026-10-28 08:53:05 691 41

原创 【Linux网络】网络基础下篇:数据到底怎么从进程 A 到进程 B?从 MAC、IP、端口到 Socket 一次理清

本文系统讲解数据从发送主机到接收主机的完整传输过程,涵盖局域网通信中MAC地址的作用、以太网共享介质与碰撞问题、数据封装与解包机制,以及跨网络传输中IP地址与MAC地址的协同工作。重点解析了路由器如何根据路由表转发数据,明确源/目的IP与MAC在传输过程中的变化规律,并厘清端口号、进程ID、Socket、TCP/UDP、网络字节序及sockaddr_in等核心概念,最终回答“数据如何准确交付至目标进程”这一核心问题。

2026-10-25 00:04:15 1016 16

原创 【Linux网络】网络为什么要分层?从协议、OSI 到 TCP/IP,一次搭起网络通信整体框架

本文从计算机网络的发展历程出发,阐述了网络出现的必要性,强调协议在通信中的核心作用,并通过对比连接与协议的区别,说明“能传”不等于“能懂”。文章系统介绍了协议分层思想,以打电话为例生动诠释了分层的逻辑与实现机制,引出OSI七层模型与TCP/IP四层模型的框架体系,为后续深入学习网络技术奠定基础。

2026-10-24 23:58:08 3781 11

原创 【Linux】线程安全进阶:单例模式、可重入函数与死锁排查

本文从线程池的单例管理出发,介绍饿汉模式与懒汉模式,并进一步分析多线程环境下单例创建的线程安全问题。随后区分线程安全与可重入函数的概念,结合多锁场景讲解死锁产生的四个必要条件及常见规避方法,最后补充 STL 容器、unique_ptr、shared_ptr、CAS、自旋锁和读写锁在线程并发中的使用边界,帮助建立更完整的 Linux/C++ 并发安全认识。

2026-10-23 17:37:36 758 18

原创 【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出

本文从多线程程序的日志记录入手,先实现一个支持终端与文件输出的简单日志模块,再继续手写固定线程池,围绕任务队列、工作线程、条件变量、任务提交与异常处理展开。重点分析为什么任务必须在锁外执行、线程池如何复用 worker,以及 Stop、notify_all、join 如何配合完成安全退出,串起生产者消费者模型在线程池中的实际应用。

2026-09-14 09:40:47 408 28

原创 【Linux】条件变量为什么必须配合互斥锁:从 pthread_cond_wait 到阻塞队列

本文围绕 Linux 条件变量展开,从“为什么只有互斥锁还不够”这个问题切入,介绍 pthread_cond_wait、signal、broadcast 等接口的使用与原理,重点解释条件变量为什么必须配合互斥锁、为什么等待条件要用 while 判断,以及伪唤醒和丢失唤醒问题。随后结合生产者消费者模型,完整实现基于 mutex、condition variable 和 BlockingQueue 的线程同步,并补充停止、唤醒与资源回收流程。

2026-09-14 09:09:36 1452 36

原创 【Linux】多线程抢票为什么会出错?从 mutex、futex 到 RAII,讲清线程互斥

本文从多线程抢票出现负数和数据错乱的问题出发,分析 ticket-- 为什么存在线程安全问题,并继续介绍临界资源、临界区、pthread mutex、原子操作、futex、RAII 锁封装以及常见加锁误区,梳理 Linux 线程互斥从现象到实现原理的完整过程。

2026-09-10 02:37:32 1461 40

原创 【Linux】信号量到底在数什么:从PV操作到RingQueue环形队列生产者消费者模型

本文从“信号量到底在数什么”出发,结合 P/V 操作、POSIX 信号量接口和环形队列,讲清空格资源与数据资源如何配合完成生产者消费者同步,并进一步分析单生产单消费扩展到多生产多消费后,为什么还需要互斥锁保护生产和消费下标。

2026-09-10 01:13:10 1340 22

原创 【Linux】epoll 真的是 O(1) 吗?从阻塞 I/O、select/poll 到 LT/ET 与 Reactor 一次讲透

本文围绕"程序如何知道该处理哪个 fd",梳理高并发网络模型演进。阻塞单线程会卡死所有连接,一连接一线程又扛不住大量长连接,于是 I/O 多路复用登场。select/poll 盯住大量 fd,但每轮要重递集合、扫全部 fd;epoll 把关注集合注册进内核,epoll_wait 直接返回就绪事件。LT 条件成立即提醒;ET 强调状态变化,要求读写推进到 EAGAIN。最终汇聚成 Reactor,EventLoop 只做事件分发。epoll 高效告知谁有事,非阻塞 I/O、缓冲区与状态机决定能否处理完。

2026-09-08 13:27:37 1427 35

原创 【Vue3 + TypeScript】接口报错别再到处 try/catch:从请求封装、错误分类到全局兜底,搭一套可维护的错误处理体系

前端错误处理的关键不在 try/catch 写法,而在职责分层。先把错误统一为 AppError(网络/HTTP/业务/取消/未知),由 axios 请求层归一化;全局层处理 401、权限、网络等系统错误;业务错误(如库存不足)交还业务层;组件层用错误边界局部降级,Vue errorHandler、window.onerror、unhandledrejection 作最后兜底。另注意日志脱敏、错误节流、finally 恢复 loading、取消请求不提示。

2026-09-03 13:18:03 2226 38

原创 【Linux】pthread_t 到底是什么?从线程控制块、线程栈到 clone,把 NPTL 一次追到底

本文继续深入 pthread 底层实现,从 pthread_t、NPTL、TLS 和线程栈入手,追踪 pthread_create 的内部流程,分析 struct pthread、mmap、create_thread 与 clone 的关系,理解 Linux 线程从用户层接口到内核执行流的完整链路。

2026-08-31 09:49:53 1211 49

原创 【Linux】多线程打印为什么会乱?pthread 创建、等待、退出、取消与分离全实战

两个线程同时 printf,输出混在一起看不清是谁打的?这篇从第一个 pthread_create 开始,创建、等待、退出、取消、分离五个接口全部配可运行代码逐个讲透:线程参数怎么传、返回值怎么拿、join 和 detach 怎么选、线程被取消时返回值是什么。每段代码都能直接复制运行,跑完你对线程生命周期就没有盲区了。

2026-08-30 01:01:09 1310 26

原创 【Linux】malloc 1GB 内存为什么没立刻占满?从缺页、COW 到 Cache/TLB,看懂线程为什么更轻

malloc 了 1GB 内存,任务管理器里却几乎没变化?这篇从缺页中断的三种类型讲起:硬缺页、软缺页、无效缺页,再到写时拷贝(COW)如何让 fork 变快。最后落到正题——进程切换到底贵在哪(Cache、TLB 全得重刷),线程为什么天然更轻。原理配执行流对比图,面试讲“线程为什么轻”不再干背结论。

2026-08-28 08:01:31 1719 36

原创 【Linux】线程到底是什么?从轻量级进程、虚拟地址到页表与 MMU,一次理清线程底层模型

背了“线程是进程内的执行分支”,但面试官追问 LWP、页表就卡壳?这篇从 task_struct 讲到轻量级进程,再往下追到虚拟地址、两级页表和 MMU/TLB,把“Linux 为什么能用进程模拟线程”这件事一次讲透。看完你能回答:线程和进程到底差在哪,为什么说虚拟地址就是资源的代表。

2026-08-25 00:31:45 2668 44

原创 【MySQL 慢查询排查实战】列表接口逐渐变慢时,怎样从请求链路定位原因

本文以可复现的订单列表查询为例,从请求分段计时、实际 SQL、EXPLAIN、联合索引、查询字段和深分页逐步定位性能问题,并严格区分 MVCC 一致性读、锁定读与元数据锁等待。

2026-08-21 21:46:37 1600 39

原创 【Flask SSE 实时大屏】从数据库新增记录到 ECharts 更新的完整演示链路

本文用 Flask、SQLite、SSE 与 ECharts 搭建一条可复现的实时数据演示链路,覆盖数据写入、历史加载、事件流格式、心跳、Last-Event-ID 续传、Nginx 缓冲以及鉴权和租户隔离注意事项。

2026-08-21 21:38:23 2790 27

原创 【Linux】信号到底什么时候被处理?sigaction、中断、用户态内核态与 SIGCHLD

本文从“信号到底什么时候被处理”出发,继续深入 sigaction、信号捕捉流程、用户态与内核态切换、中断和系统调用,并进一步介绍可重入函数、volatile 与 SIGCHLD,串起 Linux 信号从内核检查到用户 handler 执行的完整过程。

2026-08-17 18:09:09 2350 27

原创 【Linux】信号产生后去了哪里?从 Pending、Block 到 Core Dump,讲清信号的保存

本文继续讲 Linux 信号产生之后如何保存,重点梳理 Pending、Block、Delivery 三个概念,以及 pending、block、handler 三张表之间的关系,并结合 sigset_t、sigprocmask、sigpending 实验,最后介绍 Term、Core Dump 与 gdb 事后调试。

2026-08-17 18:08:07 1921 36

原创 【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生

本文从 Ctrl+C 入手,围绕 Linux 信号的产生展开,介绍 signal、kill、raise、abort、前后台进程、SIGKILL、SIGPIPE、alarm 等内容,并结合除 0、野指针、定时任务等实验,理解信号从产生到被进程记录的完整过程。

2026-08-16 12:41:01 1696 30

原创 【RAG 分层排查】资料在知识库里却答不对:从切片、召回到提示词逐层定位

资料明明已经写进知识库,模型为什么仍然答不对?本文从原始文档、切片规则、Embedding 模型、向量入库、Top K 召回、元数据过滤、重排和提示词等环节逐层排查,并结合 Ollama 与 ChromaDB 给出可观察的检索示例,帮助定位答案缺失、旧数据干扰和模型不一致等常见问题。

2026-08-16 00:25:57 254 13

原创 【Linux】共享内存为什么快?System V 的 key、shmget、shmat 与进程通信实战

共享内存为什么被称为高效的 IPC 方式?本文从共享内存映射原理出发,结合 ftok、shmget、shmat、shmdt 和 shmctl,讲清 key 与 shmid、资源生命周期、进程间数据共享以及同步问题,并通过 Server/Client 实验串起完整通信流程。

2026-08-09 17:52:33 1702 42

原创 【Linux】两个毫无关系的进程怎么通信?命名管道 FIFO 从原理到 Server/Client 实战

匿名管道通常依赖父子进程继承文件描述符,那么两个毫无关系的进程怎么通信?本文从 FIFO 的 pathname 入手,结合 mkfifo、open 阻塞规则和 Server/Client 实验,讲清命名管道的通信原理、EOF 行为,以及它和匿名管道之间真正的区别。

2026-08-09 17:48:34 2468 24

原创 【CMake】换台机器就编译失败?用 Presets + vcpkg 固定依赖、工具链与 CI

![封面](https://i-blog.csdnimg.cn/direct/a1482d08e2004b53a847c242587c3566.png#pic_center)>🔥个人主页:<font color="whiblue"><strong>**[爱和冰阔乐](https://blog.csdn.net/2402_87731470?spm=1011.2415.3001.5343)**</strong></font>>📚专栏传送门:[《数据结构与算法》](https://blog.

2026-08-06 09:38:55 1793 34

原创 【Linux】从匿名管道到进程池:任务派发、fd 继承 Bug 与完整实现

本文基于匿名管道实现一个简单的 C++ 进程池,完整拆解任务码、Channel 管理、子进程创建、轮询派发与进程回收流程,并重点分析后创建的子进程继承历史写端后,为什么会导致 EOF 无法到达、子进程无法退出以及父进程卡在 waitpid()。

2026-08-05 15:11:45 1110 34

原创 【Linux】进程为什么不能直接通信?匿名管道原理、fd 继承与读写规则

进程拥有独立的虚拟地址空间,彼此无法直接交换数据。本文从 IPC 的本质出发,结合 pipe()、fork() 与文件描述符继承,讲清匿名管道的底层关系,并通过代码分析字节流、阻塞读写、EOF、SIGPIPE、管道容量与 PIPE_BUF 原子写规则。

2026-08-04 15:08:40 998 31

原创 【Linux】没有公网 IP 也能 SSH 回内网:反向 SSH、ProxyJump 与 systemd 保活实战

没有公网 IP,人在外面怎么 SSH 回家里的 NAS、实验室电脑或树莓派?本文从反向 SSH 的工作原理讲起,结合 ssh -R、ProxyJump、systemd、SSH 心跳与权限限制,完整演示隧道建立、远程访问、自动重连和逐层排障过程,并分析“进程在线但隧道失效”等常见问题。

2026-07-30 00:13:54 2529 46

原创 【Linux】系统彻底进不去怎么办?initramfs、recovery 与 chroot 救援指南

当旧内核也无法正常进入系统时,可以继续通过 initramfs shell、recovery mode 或 Live USB 救援。本文讲解根设备与 UUID 排查、文件系统检查、分区挂载、运行目录绑定、chroot 修复、GRUB 重建及内核包重装,并整理恢复后的验收和升级前预防方法。

2026-07-26 08:43:36 1445 49

原创 【Linux】内核升级后启动失败?旧内核回退、initramfs 重建与 DKMS 修复

Ubuntu 更新内核后无法启动,先别急着删内核或重装系统。本文从 GRUB 进入旧内核开始,讲清启动阶段判断、失败日志查看、/boot 空间检查、initramfs 重建、UUID 与 GRUB 参数核对,以及 DKMS、headers 和 Secure Boot 相关故障的处理方法。

2026-07-26 08:42:52 717 26

原创 【Linux库制作与原理进阶】从 ELF 装载到延迟绑定:搞懂动态库、GOT 与 PLT

本文围绕 ELF 装载与动态链接展开,讲清 Program Header Table 如何指导 Segment 映射,动态库如何进入进程地址空间,以及 PIC、GOT、PLT 分别解决什么问题。通过首次调用与后续调用的对比,进一步理解符号解析、地址重定位和延迟绑定的完整过程。

2026-07-21 19:18:04 4102 40

原创 【Linux】库制作与原理进阶:从 ELF 双视图到静态链接,搞懂符号表与重定位

本文从多个 .o 如何形成可执行文件讲起,结合 readelf、objdump 和符号表实验,分析 Section 与 Segment、UND 符号、重定位表及 call 地址修正过程,理清静态链接如何完成符号解析与地址重定位,并说明静态库参与链接的本质。

2026-07-21 19:16:48 820 23

原创 【Linux】库制作与原理:从源码到静态库,搞懂 ar、-I/-L/-l 与打包交付

本文从一套可直接编译的源码出发,讲清头文件、源文件和目标文件之间的关系,并使用 gcc 与 ar 完成静态库制作。通过实际报错分析 -I、-L、-l 的作用,进一步介绍静态库的目录整理、Makefile 自动构建、打包交付、系统安装及 ldd 查看依赖等内容。

2026-07-19 09:48:42 1240 40

原创 【Linux】库制作与原理:从动态库 not found 到 ELF 加载,彻底搞懂运行时查找

本文承接上篇,介绍动态库的制作与使用,讲清 -fPIC、-shared 以及“编译成功但运行时找不到 .so”的原因,并整理动态库的四种查找方法。同时补充 Visual Studio 中 .lib、.dll 的制作与调用,最后串联目标文件、ELF、Section、Segment 和程序加载的基本流程。

2026-07-19 09:47:57 464 17

原创 【Linux】Ext 文件系统篇:从 inode 到路径解析,搞懂挂载与软硬链接

本文继续讲解 Ext 系列文件系统的管理方式,重点介绍 Data Blocks、inode Table、Block Bitmap、inode Bitmap、GDT 和 Super Block 的作用,并串联文件创建、删除、路径解析、格式化与挂载过程。最后结合实验说明目录、inode、文件名以及软硬链接之间的底层关系。

2026-07-16 20:36:36 1134 48

原创 【Linux】Ext 文件系统:从机械磁盘到 CHS/LBA,搞懂扇区、块与分区

本文从机械磁盘的物理结构讲起,介绍盘片、磁头、磁道、柱面和扇区之间的关系,并结合 CHS 与 LBA 说明磁盘如何完成寻址。随后引出扇区、文件系统块、分区与块组等概念,帮助读者理解操作系统为什么要把磁盘抽象成线性空间,以及 Ext 文件系统出现前需要解决的存储管理问题。

2026-07-13 08:45:17 1178 41

空空如也

空空如也

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

TA关注的人

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