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

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

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

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

 

“孔雀开屏”图

 

 

 

 

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

猜你喜欢

转载自beigang.iteye.com/blog/1596689