自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Postgres 内核:从入门到“入土” (四) —— MVCC:时光倒流,我能看到你前任的样子

PostgreSQL的MVCC实现堪称"时光机":通过保留旧数据版本实现读写并行。其核心机制是利用xmin/xmax标记行的生死状态,UPDATE操作实质是创建新版本而非原地修改。查询时结合事务快照判断版本可见性,通过Hint Bits优化性能。但这种"盖新房不拆旧房"的设计会导致存储膨胀,依赖Vacuum清理死亡元组。源码中的HeapTupleSatisfiesMVCC函数实现了精妙的版本可见性判断逻辑,展现了MVCC在并发控制与存储效率间的精妙平衡。

2026-04-25 19:35:37 345

原创 Postgres 内核:从入门到“入土” (三) —— Page 结构:数据是如何在磁盘上“躺平”的

这篇文章深入解析了PostgreSQL磁盘数据页(Page)的结构设计。数据页采用8KB固定大小,通过精妙的布局实现高效存储:页头管理元信息,行指针从上往下排列,数据行从底部往上填充,中间空闲区域随写入动态收缩。文章详细剖析了pd_lower和pd_upper指针的协同机制、4字节行指针的位域压缩技巧,以及索引页的特殊空间设计。特别揭示了Page结构的"两头挤压"特性:行指针和数据行相向生长,直至占满空间。这种设计既保证了CPU缓存友好性,又实现了灵活的空间管理,为后续MVCC机制奠定了

2026-04-07 22:11:41 409

原创 Postgres 内核:从入门到“入土” (二) —— Postmaster:那个整天蹲在大门口的保镖

摘要:PostgreSQL的核心进程Postmaster是数据库系统的"主心骨",负责管理所有后台进程和客户端连接。作为多进程架构的核心,Postmaster通过fork()创建子进程处理客户端请求,确保进程隔离性,防止单个连接崩溃影响整个系统。它还管理着日志、检查点、WAL写入等关键后台进程,并通过信号机制实现进程间通信。文章剖析了Postmaster在Unix和Windows上的实现差异,以及其主循环的工作机制,展现了PostgreSQL"宁可停产也要保证数据安全&quot

2026-03-31 07:56:04 383

原创 Postgres 内核:从入门到“入土” (一) —— MemoryContext:数据库里的“分赃”艺术

本文深入解析了PostgreSQL数据库内核的内存管理机制。核心采用MemoryContext(内存上下文)的树状结构实现批量内存管理,通过AllocSet分配策略将内存划分为大块(Block)和小块(Chunk),并建立回收机制。相比直接使用malloc/free,这种设计通过"餐巾纸策略"实现查询级内存自动回收,避免了频繁手动释放。文章详细剖析了palloc实现原理、内存组织结构以及C语言实现的OOP多态机制,并警示开发者注意CurrentMemoryContext切换以避免OOM。

2026-03-30 07:58:25 442

原创 Postgres内核: 从入门到“入土“(序言) -----程序员的终极浪漫与源码生存指南

有人问:为什么不去读 MySQL?或者更时髦的各种分布式数据库?PostgreSQL 是 C 语言编写的艺术品。它的代码风格严谨得像个老学究,注释多到让你怀疑这是不是在写小说。它没有那种为了炫技而写的晦涩逻辑,更多的是一种工程上的优雅。读 PG 源码,你不仅是在学数据库,你是在学如何构建一个能跑几十年的大型系统。

2026-03-23 20:02:46 342

原创 Neovim 生态中的全能利器:telescope.nvim 深度配置与架构分析

摘要: telescope.nvim 是 Neovim 生态中的高效模糊检索工具,基于 Lua 原生支持,通过模块化设计(Picker、Sorter、Previewer)实现深度扩展性。它依赖 ripgrep 和 fd 提升性能,并支持 lazy.nvim 延迟加载优化启动速度。用户可通过全局配置定制布局与主题,并借助扩展(如 fzf-native、ui-select)增强功能,实现项目切换、文件浏览等高级操作,成为现代文本编辑的核心枢纽。

2026-01-14 20:01:57 886

原创 打造你的私人 AI 编程助手:CodeCompanion.nvim 全方位配置指南

打造高效AI编程助手:CodeCompanion.nvim配置指南 CodeCompanion.nvim是一款深度集成的Neovim AI插件,提供三种工作模式(Chat/Inline/Cmd)和多重适配器支持(OpenAI/Gemini/Ollama等)。其核心优势在于: 高度可定制:通过策略(Strategies)系统定义AI交互行为 极速响应:ACP模式配合本地CLI工具实现毫秒级补全 智能上下文:变量系统让AI读取LSP诊断/Git状态等环境信息 配置要点包括: 适配器设置(支持OAuth认证) 策

2026-01-14 07:54:38 1615

原创 现代 Neovim 插件全景图:从底层基建到 AI 驱动

现代 Neovim 插件全景图:从底层基建到 AI 驱动

2026-01-13 21:49:58 884

原创 GDB 调试命令详解:高效掌握常用调试技巧

熟练掌握缩写命令(如rnsp)能显著提升调试效率。合理使用断点与监视点,可以大大简化定位 bug 的过程。多线程、多进程调试技巧适用于复杂项目环境。

2025-04-13 21:12:48 414

原创 [特殊字符] 终端效率提升指南:zsh + tmux

通过配置 oh-my-zsh 和 tmux,我们可以打造一个高效、美观且稳定的终端环境。这不仅能提升开发效率,也能让你在日常命令行操作中事半功倍。如果你还在用默认终端,不妨试试这套组合,享受丝滑操作的快感吧!

2025-04-13 20:52:09 1272

原创 PostgreSQL的内存结构

PostgreSQL的内存结构对于数据库的性能和稳定性至关重要。它主要分为两大类:本地内存区域(Local memory area)和共享内存区域(Shared memory area)。

2024-11-24 13:36:37 820

原创 PostgreSQL中的内存上下文管理

在数据库的世界里,内存管理是性能优化的关键。PostgreSQL,作为一个高级的开源对象关系数据库系统,拥有一套精细的内存上下文管理系统,它不仅提高了数据库的性能,还增强了系统的稳定性。本文将深入探讨PostgreSQL中的内存上下文是如何工作的,以及它为什么如此重要。

2024-11-24 13:33:50 853

原创 C 语言中的模板编程

在 C 语言中,模板编程通常用预处理器进行,以避免代码冗余并提高可维护性。本文将介绍几种常见的 C 语言模板实现方法,并通过示例代码进行说明。

2024-10-31 15:49:50 1245

原创 10个C语言(C99)编程技巧:提高效率与可读性

在C语言编程中,我们经常会遇到一些可以提高代码效率和可读性的技巧。以下是我在编写C代码时常用的十个模式和技巧,它们涵盖了从基础的代码简化到复杂的宏定义和状态管理。

2024-10-31 14:49:37 1902

原创 C语言中的高级元编程

人们的自然反应是用典型的C方式实现:首先创建一个条件数组,然后进行轮询,最后根据轮询的返回值执行特定的代码。对于C程序员来说,或许可以容忍,但如果你来自其他背景,可能会觉得简直不可接受。实现一个类似于C语言的switch语句的控制结构,具有可变数量的条件。实际上,这是可以做到的。注意,我们不得不将宏拆分成两个,以便可以在多个地方重用同一个__COUNTER__的值。)与触发它们的条件更紧密地结合在一起,而不是先列出所有条件,然后再列出所有动作。C语言中的元编程是创造新语言结构的一种艺术,通常通过宏来实现。

2024-09-20 20:40:43 867 1

原创 深入理解 PostgreSQL 的 MVCC:确保数据一致性的幕后技术

MVCC 是一种通过维护数据的多个版本来实现并发控制的机制。在 MVCC 系统中,数据库可以同时支持多个事务进行读写操作,而不会互相阻塞。每个事务在执行时看到的是某一时间点的数据快照,而不会被其他事务的操作所干扰。这种机制的核心思想是“数据不锁定,操作创建快照”。MVCC 是 PostgreSQL 处理并发控制的核心技术,通过维护多个数据版本和使用快照隔离,确保了数据的一致性和系统的高并发性能。它允许读写操作并行进行,而无需加锁,大大提高了系统的效率。

2024-08-06 10:26:47 1136

原创 深入了解 PostgreSQL 的优化器:提升查询性能的幕后英雄

查询优化器是数据库管理系统的一个组件,负责决定 SQL 查询的最佳执行计划。一个查询可以有多种执行方式,而优化器的任务是选择其中代价最小的一个执行计划。执行计划的代价通常取决于执行该查询所需的资源(如 CPU、I/O、内存等)和时间。PostgreSQL 的优化器在查询性能的优化中起到了关键作用。通过理解其工作机制和常见的优化技术,数据库管理员和开发者可以更好地利用优化器的能力,提升数据库系统的性能。同时,合理的数据库设计、索引使用、统计信息维护,以及查询优化实践,也是确保优化器发挥最大作用的重要因素。

2024-08-06 10:20:38 1081

原创 深入理解 Linux 内核之module_init

initfn是模块的初始化函数,通常由开发者定义。这个宏主要做了两件事:定义一个静态内联函数__inittest:这个函数返回initfn,即开发者定义的初始化函数。调用__initcall:将__inittest注册为一个初始化调用。__initcall宏__initcall。

2024-08-05 10:23:42 1020

原创 C 语言之泛型编程

泛型编程是一种编程范式,旨在编写与特定数据类型无关的代码,从而提高代码的复用性和灵活性。在 C++ 中,模板提供了直接支持泛型编程的语法。而在 C 中,C11 标准的新特性使我们能够实现类似的功能。C11 标准的新特性,特别是 _Generic 关键字,使得在 C 语言中实现泛型编程变得更加容易。通过结合使用宏定义、void* 和 _Generic,我们可以编写出与特定数据类型无关的代码,从而提高代码的复用性和灵活性。希望这篇博客能帮助您理解如何在 C11 中实现泛型编程。

2024-06-16 18:49:02 1014

原创 C 语言之面向对象编程

面向对象编程是一种编程范式,它通过“类”和“对象”来组织代码。类(Class):一种数据结构,用于定义对象的属性和行为。对象(Object):类的实例。继承(Inheritance):一个类可以继承另一个类的属性和行为。多态(Polymorphism):不同类的对象可以通过相同的接口调用不同的方法。虽然 C 语言不是面向对象的编程语言,但通过使用结构体、函数指针和一些编程技巧,我们可以在 C 中实现面向对象编程的概念。通过以上示例,我们展示了如何在 C 中模拟类、对象、继承和多态性。

2024-06-16 18:34:02 937

原创 C 语言之分支预测优化

分支预测是处理器在遇到条件分支指令(如 if-else 语句)时,预先猜测分支方向的一种机制。处理器通过预测分支的执行路径,可以减少流水线的停顿,提升指令执行效率。如果预测正确,指令流水线能够连续执行;如果预测错误,则需要清空流水线并重新加载指令,导致性能损失。分支预测的影响因素分支方向:处理器更擅长预测某些方向的分支,如“往前跳转”或“往后跳转”。分支历史:现代处理器使用历史信息来预测分支,如二级分支预测器。分支频率:高频分支预测错误的代价更大。

2024-06-13 16:26:44 1022 1

原创 C 语言之 Duff’s Device

Duff's device 是一种优化循环展开技术,用于提高数据复制或处理的效率。由 Tom Duff 在 1983 年提出,主要通过将循环展开和 switch-case 语句结合,减少循环控制的开销。

2024-06-13 15:54:31 793

转载 深入浅出Presto:PB级OLAP引擎

深入浅出Presto:PB级OLAP引擎

2021-06-28 17:57:11 246

原创 Java 自动向量化

1. 简介1.1 SIMD通常,程序的代码是串行执行的。这意味着单个命令或语句按顺序执行,一个接一个。以算术为重点的程序是对数字进行大量计算的程序。通常,这些程序处理大量数据,并且许多信息以相同的方式一个接一个地处理。例如。对于 1000 个粒子的模拟,模拟中将有一个步骤,用其当前速度 v 更新每个粒子的位置 s:s = s + v。这必须对每个粒子完成,即对粒子数组 s [0] 到 s[999]。如果您可以将几个粒子组合成一个批次并一次性处理该批次,则可以加快速度。对于上面的示例和一组 4 个粒子,

2021-06-22 15:48:15 1804

原创 C语言中 typedef常用方法

typedef 的作用是给已知的数据类型命名别名,因为有时使用别名更方便,语义更清晰。1. 复杂的数据类型名称简化 typedef 的典型应用就是可以用一个较为简短的别名去表示一个复杂数据类型 。例如,如果程序需要一个如下形式的函数指针类型void (*)(int, int); 并且程序中还需要定义较多这种类型的指针变量,那么每定义一个变量就写一遍这个类型,不仅麻烦而...

2018-07-14 12:12:20 4379

原创 C 语言实现智能指针

attribute((cleanup(f)) 是 GCC 提供的一个强大特性,可以显著简化 C 语言中的资源管理工作。通过定义清理函数并修饰变量,我们可以确保在变量的作用域结束时自动执行清理操作,减少资源泄漏的风险。这一特性在内存管理、文件操作和多线程编程等场景中都具有广泛的应用价值。

2017-11-21 09:23:17 4377 2

原创 Windows 安装 Gitblit

Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具.git的管家。官网:http://gitblit.com/1、安装前准备JAVA JDK 安装配置参考:JDK安装与环境变量配置2、下载 Gitblib 进入官网点击图中的位置下载 3、将起解压到目录 E:/Git/ (安装目录)下 图中 Repository 目录用

2017-04-13 17:45:57 543

原创 Proteus 8.1 51单片机仿真双人对战五子棋

黑白双方循环落子,黑方先下,通过上下左右四个按键选择落子位置,按下确定按键即可将棋子放置在棋盘上。当有一方连成5子或棋盘落满棋子,游戏结束,判定双方胜负。按下悔棋按键可以悔棋,每按一次可以悔棋一步,可以无限悔棋,按下重新开始按键,游戏重新开始。内存需求较大,51单片机无法满足,因此需要扩展内存。Proteus需添加240X320的彩色液晶。1、通过按键选择下棋位置。

2016-11-17 14:30:39 4180 10

Proteus 8.1 51单片机仿真双人对战五子棋

Proteus 8.1 51单片机仿真双人对战五子棋

2024-06-15

空空如也

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

TA关注的人

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