PostgreSQL的“孔雀开屏”式程序架构

本文详细解析了PostgreSQL数据库系统的启动流程,从main函数到各辅助进程的启动,再到最终对外提供服务的状态。介绍了内存上下文初始化、共享内存分配、后台进程管理等一系列关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看着下面这个图, 就想到了“孔雀开屏”。从main开始经过细致、周密的准备,pg启动了postmaster进程、系统日志进程、昙花一现的启动进程、后台写进程、写WAL日志进程、……,最后在服务器段抛出一句”database system is ready to acceptconnections”,开始准备对外提供服务。如果这时有客户端请求,就启动postgres服务进程提供服务。

从main开始,初始化内存上下文、设置时区、设置行政区时间、设置SSL、分配共享内存、在共享内存里初始化一系列对象和设施、设置文件描述、初始化后台进程列表、设置信号处理句柄、加载hba等文件,再加上共同的错误、日志处理模块、内部实现的PG_TRY、PG_CATCH、PG_END_TRY,各进程相同的内存管理机制,还有处理并发的锁机制等等,构成了“孔雀”的体,其中内存上下文每个pg进程都有一套,共享内存由所有进程共同使用。然后启动相关辅助进程和提供服务的postgres服务进程,构成了“孔雀开屏”的“屏”。如果给点并发,这个“屏”就开的更大更炫目了。加上做IPC的文件、管道、信号、共享内存等这些经络,这个“孔雀”活了。

Pg的多进程架构经住了很多严苛场景的考验,如果把其中数据库相关业务逻辑干掉,pg就可以是个不错的通用多进程程序架构,可以在上面填入自己的业务逻辑代码,少花好多精力得了一个非常棒的多进程架构,有需要的可以考虑。要是把fork换成ThreadCreate稍加改造,这也是个很好的多线程程序架构。

“孔雀开屏”图

------------
转载请著明出处,来自博客:
blog.youkuaiyun.com/beiigang
beigang.iteye.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值