- 博客(72)
- 收藏
- 关注
原创 LangGraph入门:支持搜索的智能代理系统
本文基于LangGraph构建智能代理系统,通过定义状态、节点与边,实现支持搜索与LLM调用的循环决策机制。系统采用单一职责原则设计节点:LLMCall负责调用大模型生成回复,ToolCalls负责执行Tavily搜索工具。状态共享机制确保对话历史连续,通过messages列表传递上下文。流程以LLM为入口,根据其是否调用工具决定是否进入搜索环节,形成闭环推理。最终实现对“兰州市榆中县天气”等复杂问题的多轮检索与整合回答,验证了该架构在真实场景中的有效性。
2026-09-17 15:56:09
136
6
原创 LangGraph入门:搭建智能快递配送系统AI工作流
本文通过快递配送系统类比,详解LangGraph如何用图计算实现AI工作流。核心概念包括:State(共享状态,如包裹信息)、Nodes(节点,如揽收站、分拣中心)、Edges(边,控制流程流转)及Reducers(合并规则)。通过定义状态、添加节点与条件边,构建可编译的有向图,实现多步骤、有状态的智能工作流。最终以智能快递系统为例,展示从代码设计到执行测试的完整流程,揭示图计算在复杂任务调度中的清晰性与可控性。
2026-09-15 13:57:03
245
14
原创 LangChain RAG :文本向量与内存向量存储
本文系统介绍了文本向量与向量存储技术在AI应用中的核心作用。通过嵌入模型(如DashScope Embedding)将文本转化为高维向量,实现语义表示;利用向量数据库或内存存储(如InMemoryVectorStore)高效管理向量数据,支持基于余弦相似度的语义搜索与元数据过滤。重点演示了文档嵌入、向量存储、相似性检索及元数据筛选等操作,并结合检索增强生成(RAG)模式,提升大模型问答的准确性与实用性,为构建智能知识系统提供关键技术支撑。
2026-09-14 13:57:31
268
24
原创 LangChain RAG 开发实战:文档加载与文本分割详解
从本小节开始,我们将重点放在RAG阶段(Retrieval‑Augmented Generation,检索增强生成)。这是当前大语言模型应用的核心模式。RAG的流程相对复杂,为了更好的理解RAG,我们先用AI搜索来引出RAG。对于【AI大模型】来说,它最擅长的是语义理解和文本总结,最不擅长的就是获取实时的信息。因为大模型的训练数据是有截止日期的!对于【搜索引擎】来说,它最擅长的就是获取实时的信息,缺点是信息分散,每次都需要人为进行总结。大模型与搜索引擎的结合,就是给AI配备了一个活字典,让AI可以随
2026-09-08 16:58:20
609
28
原创 LangChain:提示词模板与少样本提示功能
提示词模板是 LangChain 的核心抽象之一,它被广泛应用于构建大语言模型应用的各个环节。简单来说,只要是需要动态、批量、或有结构地向大语言模型【发送请求】的地方,几乎都会用到提示词模板。一个简单的例子,假设我们想根据一个城市名询问 LLM 其历史,按照之前的做法,我们可以定义HumanMessage("请介绍上海的历史")、HumanMessage("请介绍西安的历史")消息等等。可以发现每次询问都会描写重复的消息内容:请介绍xxx的历史。
2026-09-01 16:45:12
267
13
原创 LangChain 消息组件:从基础消息到历史消息处理
消息是聊天模型中的通信单位,用于表示聊天模型的输入和输出,以及可能与对话关联的任何其他上下文或元数据。每条消息都有一个角色和内容,以及因 LLM 的不同而不同的附加元数据。消息角色(Role角色 描述system(系统角色)用于告诉聊天模型如何行为并提供额外的上下文。并非所有聊天模型提供商都支持。user(用户角色) 表示用户与模型交互的输入,通常以文本或其他交互式输入的形式。assistant(助理角色) 表示来自模型的响应,其中可以包括文本或调用工具的请求
2026-08-28 16:20:55
186
4
原创 LangChain 输出能力:结构化解析与流式传输实践
在 LangChain 中,聊天模型提供了额外的功能:结构化输出。一种使聊天模型以结构化格式(例如 JSON)进行响应的技术。例如,可能希望将模型输出存储在数据库中,并确保输出符合数据库模式。这种需求激发了结构化输出的概念,其中可以指示模型使用特定的输出结构进行响应。这样做的核心原因是:从 “字符串” 到 “对象” 的范式转换。想象一下,在没有这个功能之前,我们调用聊天模型得到的是一个 AIMessage,其内容是一个字符串。这个字符串对人类很友好,但对程序不友好。如果我们想从这段文本中提取出相关的字段并用
2026-08-26 10:48:43
362
2
原创 LangChain 工具定义与工具调用全流程
本文介绍了LangChain中工具调用的概念与实现方式。工具调用使大语言模型(LLM)能够与外部系统交互,扩展了其能力边界,包括执行计算、查询实时数据等。主要内容包括: 工具创建方法: 使用@tool装饰器创建工具,通过函数名、类型提示和文档字符串定义工具schema 使用StructuredTool类创建工具,支持Pydantic类验证和response_format配置 工具绑定与调用: 通过bind_tools()方法将工具绑定到聊天模型 处理模型返回的tool_calls属性,执行相应工具 完整调用
2026-08-25 12:26:01
291
10
原创 LangChain:ChatModel 聊天模型与可配置模拟器
聊天模型与传统的LLM不同,它以结构化消息对象作为输入和输出,支持多轮对话和工具调用。文章详细讲解了消息类型(SystemMessage、HumanMessage、AIMessage等)、模型分类(真实模型和可配置模拟器)以及与LLM的区别。此外,还介绍了通过API定义聊天模型的方法,包括ChatDeepSeek的使用和init_chat_model工厂函数,后者支持运行时动态配置模型参数。文章提供了多个代码示例,帮助理解如何创建和配置聊天模型。
2026-08-24 14:58:24
218
7
原创 吃透红黑树:节点设计、插入逻辑与平衡调整完整解析
红黑树是一种自平衡二叉搜索树,通过颜色规则、旋转和变色操作维持平衡。其核心特性包括:1)节点非红即黑;2)根节点为黑;3)红节点的子节点必须为黑;4)任一节点到空节点的路径包含相同数量的黑节点。这种设计确保最长路径不超过最短路径的两倍,时间复杂度保持O(logn)。相比AVL树,红黑树的平衡要求更宽松,旋转操作更少,适合频繁插入删除的场景。实现时需处理插入后的四种情况(根据叔叔节点状态调整),并通过递归检查颜色和黑节点数量来验证树的合法性。C++的map/set底层即采用红黑树实现。
2026-08-12 19:58:46
350
10
原创 预处理器:宏、运算符与条件编译
本文介绍了C语言预处理的相关知识,主要包括:1. 预处理的概念:编译前由预处理器处理源代码的阶段,主要进行文本替换、文件包含和条件编译。2. 预定义符号的使用,如__FILE__、__LINE__等。3. #define定义宏的多种用法:定义宏常量、宏函数,讲解了带有副作用参数的注意事项,并对比了宏与函数的区别。4. #和##运算符的使用方法及作用。5. #undef指令用于移除宏定义。6. 条件编译的指令和与普通if语句的区别,强调预处理阶段就决定代码是否保留的特性。文章通过具体示例详细说明了各种预处理指
2026-08-11 16:14:34
328
9
原创 从原子性到串行化:数据库事务全解
MySQL事务机制解析 本文系统介绍了MySQL事务的核心概念与实现原理。事务是一组DML语句的逻辑单元,具有ACID特性: 原子性:事务要么全部完成,要么全部回滚 一致性:事务前后数据库保持完整性约束 隔离性:通过四种隔离级别控制并发访问 持久性:提交后修改永久生效 重点分析了事务的隔离级别: 读未提交:可能脏读 读提交:避免脏读但可能不可重复读 可重复读(MySQL默认):保证同一事务多次读取结果一致 串行化:完全顺序执行,避免所有并发问题 通过实验演示了事务的基本操作(begin/commit/rol
2026-05-04 19:22:41
789
17
原创 MySQL索引为什么快?从单个Page到B+Tree,一篇讲透!
本文系统介绍了MySQL索引的核心概念与实现原理。首先阐述了索引的基本作用与优势,通过示例展示了索引对查询性能的提升。重点分析了InnoDB存储引擎的索引结构:以16KB的Page为基本I/O单位,采用B+树组织数据,具有聚簇索引特性。对比了MyISAM的非聚簇索引实现差异,解释了普通索引的回表机制。最后详细介绍了索引的查询、创建(主键/唯一/普通索引)和删除操作。全文深入浅出地剖析了MySQL索引的底层原理与使用方法,为数据库性能优化提供了理论基础。
2026-05-01 15:47:13
423
14
原创 从优先级到调度效率:Linux O(1)调度算法的底层逻辑(含bitmap优化、活跃/过期队列机制)
本文摘要: 文章系统介绍了Linux进程调度机制,重点解析了进程优先级管理和切换原理。在优先级方面,通过PRI和NI值实现动态调整,其中NI(nice值)作为修正数据,范围-20到19,对应PRI值60-99,确保关键任务优先执行。进程切换涉及上下文数据保护,通过保存寄存器状态到PCB的tss结构体实现高效并发。调度器采用多级队列结构(runqueue),包含140级优先级队列和位图索引,配合活跃/过期队列轮转机制,结合时间片分配策略,有效避免进程饥饿问题。文章还指出直接修改PRI可能破坏调度公平性,而通过
2026-04-21 17:09:05
686
15
原创 C++ 智能指针全解析:从 RAII 到自定义删除器的内存管理艺术
摘要:本文系统介绍了C++智能指针的核心机制与应用。智能指针基于RAII机制实现动态内存的自动化管理,解决了原生指针的内存泄漏、重复释放等问题。重点分析了unique_ptr(独占所有权)、shared_ptr(共享所有权)和weak_ptr(解决循环引用)三类智能指针的实现原理与使用场景。其中详细探讨了shared_ptr的引用计数设计、线程安全问题及make_shared优化,并通过示例展示了weak_ptr解决循环引用的方法。最后阐述了自定义删除器的实现方式,包括函数指针、仿函数和lambda表达式三
2026-04-04 21:01:06
592
23
原创 C++11 核心特性解析(二):包装器、参数包与 emplace 进阶技术体系详解
本文摘要:C++11新特性详解 引用折叠与完美转发 介绍引用折叠规则(四种组合情况) 万能引用(T&&)的实现原理 std::forward实现完美转发的机制 可变参数模板 参数包基本语法(Args...) 两种展开方式:递归展开和非递归展开 配合完美转发实现万能函数 Lambda表达式 匿名函数的语法结构 捕获列表的多种捕获方式 底层实现原理(编译器生成仿函数类) 包装器(function/bind) std::function统一可调用对象类型 std::bind实现参数绑定和适配 成员
2026-03-31 20:48:07
512
17
原创 C++11 核心特性解析(一):从初始化列表到移动语义,解锁高效对象构造
本文摘要:C++11引入了列表初始化、右值引用和移动语义等新特性。列表初始化使用{}语法统一了初始化方式,支持内置类型和自定义类型。右值引用(T&&)用于绑定临时对象,与左值引用(T&)形成重载匹配规则。移动语义通过移动构造和移动赋值实现资源所有权转移而非拷贝,显著提升性能。移动构造和移动赋值优先处理右值,避免深拷贝开销。编译器在特定条件下会自动生成默认移动操作,但若用户自定义移动操作则不会自动生成拷贝操作。这些特性共同优化了C++对象初始化、参数传递和资源管理的效率。
2026-03-24 19:11:03
532
7
原创 C++STL:从 0 到 1 手写 C++ string以及高频易错点复盘
本文详细介绍了C++中string类的模拟实现,主要包括以下内容:1. 整体结构设计:使用char*指针管理字符数组,配合_size和_capacity记录字符串长度和容量;2. 构造/析构函数:实现默认构造、字符串构造、拷贝构造和析构函数,重点处理内存管理和'\0'结尾问题;3. 功能接口:实现reserve、c_str、PushBack、Append、Insert、erase、substr、Find等核心功能;4. 运算符重载:重载赋值运算符、比较运算符、+=、<<和>>等常用运
2026-02-01 21:05:55
861
16
原创 二叉树遍历全解析:递归与非递归实现一网打尽
本文详细介绍了二叉树的基本操作与遍历方法。首先定义了二叉树节点结构BTNode,包含数据域和左右子节点指针。重点讲解了三种深度优先遍历(前序、中序、后序)的递归和非递归实现,以及广度优先的层序遍历实现。此外还提供了计算节点总数、叶子节点数、树高度、第k层节点数等实用接口的实现方法,并介绍了判断完全二叉树的算法。所有代码示例均采用C语言实现,涵盖了二叉树操作的核心内容,为理解和应用二叉树数据结构提供了全面参考。
2026-01-29 20:46:11
878
16
原创 数据结构:栈与队列的核心概念与模拟实现
本文介绍了两种基础数据结构:栈和队列。栈遵循后进先出(LIFO)原则,可用数组或链表实现,适用于函数调用等场景;队列遵循先进先出(FIFO)原则,同样支持数组和链表实现,常用于任务调度。文章详细展示了两种结构的C语言实现代码,包括初始化、插入、删除等核心操作,并通过快速排序的非递归实现演示了栈的应用。最后对比了两者的特点:栈像叠盘子,队列像排队,分别适用于不同场景。这些线性结构是算法设计和系统开发的重要基础。
2026-01-27 15:21:03
1307
22
原创 网络通信:udp套接字实现echoserver和翻译功能
本文介绍了基于UDP的EchoServer实现及扩展翻译功能。主要内容包括:1. 基础EchoServer实现:通过socket()创建UDP套接字,使用bind()绑定端口,利用recvfrom()/sendto()完成数据收发,实现消息回显功能。2. 网络编程基础:详细讲解了网络字节序转换函数(htons/ntohs等)、IP地址转换接口(inet_pton/inet_ntop)的使用方法。3. 翻译功能扩展:通过字典类加载中英文对照表,使用回调函数机制将业务层与网络层解耦,实现简单的单词翻译功能。4.
2026-01-26 17:00:20
1323
13
原创 Linux 守护进程:会话、终端与后台运行的底层逻辑
本文系统介绍了Linux系统中的进程管理机制。主要内容包括:进程组的概念及其生命周期管理;前台作业和后台作业的定义、特性及相互转换方法;终端文件的原理及其在远程会话中的作用;会话的核心属性和进程组、终端文件与会话的关系;守护进程的必要性、创建步骤和特征。重点阐述了守护进程如何通过创建独立会话、重定向标准流等方式实现脱离终端依赖、长期稳定运行,并提供了手动创建守护进程的代码示例。这些机制共同构成了Linux系统进程管理的核心框架。
2025-12-27 16:04:09
1147
25
原创 数据结构:单链表 / 双链表的结构、接口实现与顺序表对比
本文系统介绍了链表数据结构及其实现方法。主要内容包括:1. 链表的基本概念与分类,详细分析了单链表和双链表的结构特点;2. 单链表(不带头单向不循环)的实现,包括节点定义、插入删除操作等核心代码;3. 双链表(带头双向循环)的实现,重点阐述了哨兵节点的作用及各种操作的实现;4. 两种链表的对比分析,从节点结构、操作效率、空间开销等方面进行比较。文章通过具体代码示例展示了链表操作的核心逻辑,特别强调了双链表在操作效率上的优势。全文对链表这一重要数据结构进行了全面而深入的讲解,为理解和使用链表提供了系统性的指导
2025-12-14 22:52:16
930
25
原创 网络通信:socket通信基础与相关接口
本文摘要: 本文系统介绍了网络通信的基础概念和Socket编程接口。主要内容包括:1.IP地址的作用与分类(IPv4/IPv6);2.端口号的功能及三类端口划分;3.网络字节序的必要性及大小端转换;4.Socket编程的核心接口:创建套接字(socket)、地址绑定(bind)和关闭(close)。重点解析了sockaddr结构体的使用场景,说明了网络通信和本地通信的地址绑定差异。文章通过类比门牌号、快递地址等生活实例,使抽象的网络概念具象化,为网络编程初学者提供了清晰的技术框架。
2025-12-09 22:43:22
1231
15
原创 数据结构:顺序表与基于动态顺序表的通讯录项目
本文系统介绍了线性表与非线性表的核心概念,重点阐述了顺序表的实现与应用。线性表通过顺序存储(数组)和链式存储(指针)两种方式实现,其中动态顺序表支持灵活扩容。文章详细讲解了动态顺序表的初始化、增删查改等操作,并通过通讯录项目展示了实际应用。该通讯录系统基于动态顺序表实现,具备联系人管理、查找修改等功能,演示了数据结构在实际开发中的典型应用。全文从理论到实践,系统讲解了顺序表的核心原理与实现方法。
2025-12-06 00:21:15
1483
20
原创 Linux系统:拒绝重复创建!单例模式让线程池成为 “全局唯一资源”
池化技术是一种资源复用优化方法,通过集中管理和循环利用共享资源(如线程、连接等)来提升系统性能。线程池作为典型应用,通过预创建线程并复用,避免频繁创建/销毁的开销。单例模式确保全局唯一实例,与线程池结合可防止资源浪费。实现时需考虑线程安全,推荐使用懒汉模式(按需创建)配合静态锁,既保证资源利用率又确保多线程安全。关键点包括:资源池初始化、任务队列管理、线程安全控制,以及单例模式的正确实现方式。
2025-11-30 16:41:55
701
20
原创 Linux系统:策略模式实现自定义日志功能
本文介绍了如何利用策略模式设计自定义日志系统。日志作为程序的"运行日记",可帮助开发者进行问题排查、系统监控和数据分析。文章通过策略模式将日志输出方式(文件/屏幕)封装为独立策略类,实现灵活切换。重点阐述了日志格式规范化的重要性,并展示了通过内部类log_message实现结构化日志输出,包含时间戳、日志级别、进程ID等关键信息。最后提供了简洁的宏定义接口,便于开发者快速集成使用。整个设计体现了高内聚、低耦合的原则,为系统提供了可扩展的日志功能。
2025-11-25 12:00:43
1106
27
原创 Linux系统:信号量与基于环形队列的生产者消费者模型
本文介绍了信号量机制及其在生产者-消费者模型中的应用。信号量通过非负整数计数器和等待队列实现线程同步,相比条件变量能减少无效的临界区检查。POSIX库提供了信号量的初始化、阻塞/非阻塞申请、带超时申请、释放和获取值等操作。基于环形队列的生产者-消费者模型利用两个信号量分别表示空位和数据量,配合两把互斥锁实现生产者和消费者之间的解耦,提高并发效率。最后给出了环形队列的实现代码和测试示例,展示了多生产多消费场景下的并发控制。
2025-11-20 15:06:03
720
20
原创 Linux系统:线程同步中的条件变量与基于阻塞队列的生产者消费者模型
本文介绍了多线程编程中的条件变量和生产者-消费者模型。首先通过抢票系统的例子说明了互斥锁的局限性,提出条件变量可以解决线程间协作问题。条件变量与互斥锁配合使用,通过等待/唤醒机制实现线程同步。文中详细讲解了POSIX条件变量的API,并实现了封装类。 生产者-消费者模型通过共享缓冲区解耦生产者和消费者,平衡处理速度差异。基于阻塞队列的实现使用条件变量同步线程:当队列满时阻塞生产者,队列空时阻塞消费者。文章给出了阻塞队列的模板实现和测试代码,展示了该模型如何提高系统并发效率。
2025-11-19 00:20:18
998
17
原创 C++的诗行:一文掌握内存管理中 new/delete 接口正确调用与常见场景适配
文章摘要:本文详细解析C++中的动态内存管理机制,重点阐述new和delete运算符的使用原理及注意事项。主要内容包括:1)new/delete对内置类型和自定义类型的处理差异,其中自定义类型涉及构造/析构函数的自动调用;2)底层实现原理,揭示operator new/delete与malloc/free的关系;3)典型内存管理错误场景分析,特别是数组释放时的陷阱;4)定位new的特殊用法。文章强调正确配对使用new/delete的重要性,并指出内存泄漏的常见原因,为C++程序员提供了全面的动态内存管理指南
2025-11-06 11:31:35
1136
22
原创 C 语言动态内存管理:从 malloc 到 free,一篇搞懂堆内存操作
本文系统介绍了C语言中的动态内存管理。主要内容包括:1)malloc/free函数的使用方法和注意事项;2)calloc和realloc函数的功能特点;3)常见动态内存错误类型(如空指针解引用、内存泄漏等)及典型案例分析;4)柔性数组的定义和使用场景。重点强调了正确使用动态内存的要点:必须检查malloc/realloc返回值、确保malloc/free配对使用、避免野指针和内存泄漏问题。通过实际代码示例展示了各种内存操作的正确做法和常见错误,为C语言程序员提供了实用的内存管理指南。
2025-11-04 18:29:20
1188
21
原创 Linux系统:多线程编程中的数据不一致问题与线程互斥理论
本文介绍了Linux系统中的锁机制及其在多线程编程中的应用。首先阐述了临界资源、临界区和原子性等基本概念,分析了多线程并发访问共享资源导致的数据不一致问题。随后详细讲解了POSIX线程库提供的互斥锁接口(pthread_mutex_init、destroy、lock、unlock)及其使用方法,并深入探讨了锁的底层实现原理。最后展示了如何封装互斥锁类(Mutex)和锁守卫类(LockGuard),以简化锁的使用并确保资源安全。通过锁机制可有效解决多线程环境下的数据竞争问题,保证临界区操作的原子性和线程安全性
2025-10-21 11:46:44
738
24
原创 Linux系统:线程介绍与POSIX线程库实现线程控制
本文深入探讨了Linux系统中的线程实现机制,重点分析了线程作为轻量级进程(LWP)的本质特性。文章首先介绍了线程的基本概念和核心特征,即共享进程资源与独立执行逻辑,然后详细阐述了Linux内核中轻量级进程的实现原理,包括资源共享机制和调度方式。文章还解析了POSIX线程库(pthread)的封装机制,解释了线程ID与内核轻量级进程ID的区别,并通过具体代码示例展示了线程创建、管理以及同步等操作。最后,文章从进程地址空间布局的角度分析了线程控制块(TCB)的结构和线程调度机制,揭示了用户级线程与内核级轻量级
2025-10-18 15:34:57
1006
29
原创 高并发内存池(七):大块内存的申请释放问题以及配合定长内存池脱离使用new
本文针对高并发内存池中的大块内存管理和new/delete依赖问题提出了优化方案。对于超过256KB的内存申请,采用页对齐处理并交由PageCache统一管理,通过NewSpan接口区分两种情况进行处理:小于128页的内存块进行哈希表管理,大于128页的直接向系统申请。内存释放时通过映射关系找到对应Span进行合并或系统释放。针对new/delete导致的性能问题,引入定长内存池ObjectPool来管理Span对象的创建销毁,通过预分配内存和自由链表提升性能,解决了锁竞争、系统调用开销和内存碎片问题。该方
2025-10-09 09:28:14
937
32
原创 高并发内存池(六):释放内存全过程搭建
该文详细介绍了高并发内存池的三级缓存释放机制:1) ThreadCache通过动态阈值控制本地内存释放,当自由链表过长时将部分内存块交还CentralCache;2) CentralCache通过Span管理和页号映射,回收内存块并判断是否全部归还;3) PageCache负责前后相邻Span的合并,优化大块内存复用。系统通过分层协作减少锁竞争、降低碎片,并实现多线程测试验证。关键点包括动态阈值调节、页号映射查找和跨层内存合并策略。
2025-10-06 00:03:23
915
24
原创 高并发内存池(五):手把手从零搭建PageCache全局缓存
本文摘要: 本文详细介绍了高并发内存池中PageCache的实现机制。PageCache作为三层缓存结构的底层,负责管理以页为单位的连续内存块。文章重点阐述了NewSpan接口的设计与实现,该接口用于获取或创建新的Span,满足上层缓存需求。通过哈希桶结构管理不同大小的Span,并采用切分和合并策略优化内存使用。同时介绍了GetOneSpan接口的实现,以及慢增长机制防止内存浪费。最后通过单线程和多线程测试验证了系统功能,并提供了完整源码实现。文章还解决了指针越界、静态成员初始化等技术细节问题,确保系统稳定
2025-10-01 01:40:55
855
20
原创 高并发内存池(四):手把手搭建CentralCache中心缓存
摘要: CentralCache是高并发内存池中的中央缓存组件,位于ThreadCache和PageCache之间,采用哈希桶结构管理不同大小的内存块。其主要功能包括协调线程缓存的内存申请与释放、减少内存碎片、提高内存利用率。CentralCache通过单例模式实现多线程共享,采用桶锁设计优化并发性能。核心数据结构Span管理连续内存页,SpanList组织多个Span以应对大内存需求。当ThreadCache内存不足时,通过FetchRangeObj和GetOneSpan接口从CentralCache批量
2025-09-27 23:40:25
1165
23
原创 高并发内存池(三):手把手从零搭建ThreadCache线程缓存
摘要:ThreadCache是C++高效内存管理库(如tcmalloc)的核心机制,通过为每个线程维护独立的内存缓存区(包含多个规格的自由链表),显著减少多线程竞争。其特点包括:线程私有化避免锁竞争、分级缓存快速响应请求、按需从中央缓存补充内存块、延迟释放减少碎片。实现时采用内存对齐规则(如[1,128]按8字节对齐)和高效下标映射算法,结合TLS技术确保无锁访问。通过ConcurrentAlloc/Free接口,使每个线程通过线程本地指针pTLSThreadCache访问专属ThreadCache,实现高
2025-09-22 20:39:54
1243
31
原创 高并发内存池(二):三层缓存的整体框架设计
高并发内存池是针对多线程场景优化的内存管理组件,通过三级缓存架构解决传统分配器的性能瓶颈:ThreadCache(线程私有)实现无锁快速分配;CentralCache(全局共享)协调线程间资源均衡;PageCache对接系统,管理大块内存。该设计有效避免了锁竞争、提升小对象分配效率(可达纳秒级),并显著减少内存碎片。三级分层结构(Thread→Central→Page)分别实现"快、匀、省"的核心目标,为高并发系统提供高效稳定的内存管理方案。
2025-09-21 21:37:37
1062
11
原创 高并发内存池(一):手把手教你设计一个定长内存池
池化技术(Pooling)是一种在计算机科学、数据处理和系统架构中广泛应用的资源复用与优化技术,其核心思想是通过 “集中管理、按需分配、循环利用” 一组共享资源(如计算资源、内存、连接、线程等),避免资源频繁创建 / 销毁的开销,提升系统效率、稳定性和资源利用率。简单来说,字面意思上理解池化技术就像 “储水池”:在用水之前可以先将水池注满,以后用水可以不用十里八外去担水,直接在水池中取水大大提高了效率。
2025-09-17 22:24:51
1296
22
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅