看着下面这个图, 就想到了“孔雀开屏”。从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.csdn.net/beiigang
beigang.iteye.com

PostgreSQL的“孔雀开屏”式程序架构相关推荐

  1. 集中和分散架构之间的区别_分散式应用程序架构:后端,安全性和设计模式

    集中和分散架构之间的区别 Decentralized applications, or ÐApps, require a special system design to achieve high s ...

  2. 多形态MVC式Web架构:完成实时响应

    \ 本文要点 \\ 在Web时代的前二十年,在用户视图及其现实或虚拟世界间的MVC可观察的事件驱动同步已经不再发挥什么作用了.     \\t 近期的一些新进展使这一基础理念得以在Web开发社区复苏. ...

  3. GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean

    十年前,Martin Fowler撰写了GUI Architectures一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于富客户端的代码组织/职责划分.纵览这十年内的架构模式变迁,大概可以分 ...

  4. 插件式架构设计实践:插件式系统架构设计简介

    本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...

  5. 插件式架构设计实践一:插件式系统架构设计简介

    本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...

  6. 流式数据架构理论 ◆ 基本概念

    基本概念 流 流是一种为无界数据集设计的数据处理引擎,这种引擎具备以下特征: (1)具备强一致性,即支持 exactly-once 语义 (2)提供丰富的时间工具,如事件时间.处理时间.窗口 (3)保 ...

  7. C# 插件式程序开发

    C# 插件式程序开发 在网上找了下插件式编程的资料,这里自己先借鉴下别人的,同时发现有自己的看法,不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看 ...

  8. 云应用程序架构:阿里云国际版服务器托管注意事项

    传统Web托管中的通用应用程序或Web应用程序通常总是被证明是一个挑战.无论是设计结构还是可扩展的架构,以支持趋势和需求.典型的宿主方案遵循三层体系结构,并将其划分为表示层.持久性层和应用层.借助内置 ...

  9. fir.im Weekly - iOS/Android 应用程序架构解析

    假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于 iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分享 ...

最新文章

  1. 你知道怎么使用OpenCV检测篮球运动员吗?
  2. 愈学习愈发现自己的无知
  3. 新型机器人模拟蜻蜓飞行可以乱真!
  4. tp5 excel 导入 mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作
  5. 使用双亲指针表示法存储一棵树,可以方便解决下列哪个应用问题( )
  6. Some Essential JavaScript Questions And Answers(5)
  7. verilog or VHDL乒乓球游戏电路设计
  8. [ActionScript 3.0] 记录几个ByteArray 十六进制 String等相互转换的方法
  9. 33.前端之css2
  10. acer软件保护卡怎么解除_Acer软件保护卡
  11. 机器人轨迹规划:三次样条曲线
  12. intellij idea 汉化包
  13. matlab结构数组增加域,如何用matlab创建结构数组
  14. Python网络爬虫入门篇
  15. 学习软件测试有哪些优势?
  16. 欢迎来到whai的博客
  17. 根据关键词采集文章php,如何通过文章采集获取一篇高质量的网站内容
  18. 形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机
  19. CentOS-7部署安装Zabbix 3.0
  20. 红木整装——成为现代装修行业中的新宠

热门文章

  1. 【Python 常用函数】time模块函数使用
  2. Activity中销毁fragment
  3. 编程将外部RAM2000H--202FH单元中的内容,移入内部RAM20H--4FH中,并将原数据块区域清0.
  4. Oracle 权限(grant、revoke)
  5. Ubuntu16.04重装系统
  6. 内存之ioremap内存映射
  7. 借助混合现实视频在虚拟现实领域脱颖而出
  8. java鼠标指针锤子,写个锤子JS!它应该是你最后的选择
  9. Muu云课堂V2 v2.5.6
  10. HTML既粗体又斜体,HTML粗体,斜体,预格式化等基操