您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > PostgreSQL--内核分析--多进程结构
PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第1页/共34页多进程与多线程—PostgreSQL与MySQL结构对比作者:李海翔博客:邮箱:lhx3000@163.com1进程..............................................................................................................................................21.1理解进程..........................................................................................................................21.1.1进程进程的创建...................................................................................................31.1.2进程间的通信方式...............................................................................................41.1.2.1共享内存......................................................................................................61.1.2.2管道..............................................................................................................71.1.2.3信号............................................................................................................111.2Windows系统下进程的使用.....................................................................................131.3Linux系统下进程的使用..........................................................................................152线程............................................................................................................................................172.1线程安全.....................................................................................................................182.2TLS,线程本地存储..................................................................................................202.3线程的创建与使用.....................................................................................................213进程与线程实例........................................................................................................................213.1多进程结构的大型数据库管理系统――PostgreSQL.............................................223.1.1PostgreSQL基本架构........................................................................................233.1.2如何知道PostgreSQL是多进程结构...............................................................243.1.3掌握PostgreSQL进程结构的主要代码...........................................................263.2多线程结构的数据库管理系统――MySQL............................................................263.2.1MySQL基本架构...............................................................................................283.2.2如何知道MySQL是多线程结构......................................................................293.3PostgreSQL与MySQL对比.....................................................................................303.3.1PostgreSQL文件目录的组织............................................................................303.3.1.1整体代码结构.............................................................................................303.3.1.2src主目录下代码结构................................................................................313.3.1.3数据库服务器主要代码结构.....................................................................313.3.2MySQL的文件目录组织...................................................................................333.4PostgreSQL如果线程化如何处理............................................................................34PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第2页/共34页1进程进程,何为进程?对于我们写程序的人来讲,代码写好后经编译程序编译(C代码需要链接)等过程,才能运行。这个阶段有时候很繁琐,尤其是编译大型程序集的时候,经常会花费很长时间,如果机器的物理性能好一些的话,编译速度还是可以忍受的。当我们看着自己写的静态代码组合成一个复杂的程序集合时,也许自己会由衷地心生得意:一会,我的程序就可以运行了……我的“程序”?注意,这里有个概念了,“程序”,什么是程序?其实,作为程序员,我们所谓的程序通常指的是静态的“源代码”,而上文提及的“编译程序”是一个静态的源码集合吗?答案是既肯定又否定,此“编译程序”是在操作系统上可执行的实体,已经被编译程序翻译解析、链接程序装配组合过了的、具有编译其他程序代码功能的可执行软件包,这是其静态特性;当其开始编译其他代码时,被调入内存执行,就具有了动态特性。可执行的软件包在执行的过程中,被操作系统调入内存,通过CPU、寄存器等的配合,在微指令系统的调度下被执行,这样的行为方式遵从着冯诺依曼体系结构,但同时,正在被执行的程序也就有了一个表示其在内存中存在的状态的名称――“进程”。1.1理解进程书归正传,我们深入理解一下进程:首先,进程是是一个正在运行的程序的实例,此实例具有一个动态的概念,程序员书写的各种C代码、Java代码、各式脚本代码等,不具有动态的特性,所以充其量只能称为代码段,众多代码段积攒构成完整的语义整体才能被编译使用。未被操作系统调用前,其存在形式只能以静态这个词来描述。与“静”相对的,就是“动”,动静二字描述了生活中万事万物的基本状态,计算机领域很好的把现实生活中存在的概念搬迁到计算机领域里,动静结合,相得益彰。让我们的思绪再飘远一点,讲讲静与动的关系。程序与进程,是静与动的关系。进程执行中,数据与正在执行的可处理数据的进程片段,是静与动的关系。进程处理数据,数据事先给定这种方式和进程动态获取不同数据,是静与动的关系。静与动,在计算机领域普适存在。例如:示例需求:编写测试用例测试strcat函数。解决方式一:测试用例写到测试程序中。解决方式二:测试用例写到文件中,动态读取用例文件进行测试。点评:第一种方式把测试用例集与代码耦合,灵活性不够,修改测试用例需要重新编译代码,显然不好;第二种方式把测试用例集同代码有效分离,更为合适,从而为程序动态获取数据提供了便利支持,这里采用分别对待的思维方式,把动(变化的测试用例)与静(固定的测试程序:实现读测试用例进行测试的功能)的状态区别,有效实现解耦。通过考虑动静的关系,区分动态和静态,极大地增加了灵活性,这,在计算机领域比比PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第3页/共34页皆是,再比如,配置文件的使用;命令行参数的多端变化;函数调用的入口参数;C函数指针实现的回调函数;Java的动态类加载机制等等。所以,当有了动态概念存在时,“进程”才得以称为进程。其实,在传统的教科书上,进程(process)没有一个明确的定义,书本只是以解释的方式描述了何为进程。每本书通常都会讲进程的特性以区分进程和程序,故而给出进程的动态性、并发性、独立性等特性,并以讲解进程在其生命周期中状态的变迁而乐此不疲,这似乎很有理论研究的风度,把一个事物翻来覆去里里外外地研究了透,看得学习者崇拜至极,不能自拔(当然,从操作系统的角度研究如何调度进程,则进程的状态区分还是必要的)。许多书籍(多数是操作系统相关书籍),从操作系统的角度出发讲解进程,讲了进程实例在操作系统下被抽象以后的结构组成(PCB结构、正文段、数据段;这是讲进程自我组成,尤其PCB更是为操作系统服务的),讲了进程上下文(用户级上下文、系统级上下文、寄存器上下文;这是讲进程在操作系统这个大环境下同周边环境中的软硬件的关系),讲了操作系统对其的调度方式(创建进程、撤销进程以及实现进程状态变迁),讲了进程间行为(进程间互斥与同步),讲了进程间通信(共享内存、消息、管道等)方式。但是,这种讲解,割裂了理论和实践之间的沟通道路;忽视了实际开发中,程序员对于进程知识掌握的需要;忽视了程序员需要在实践中加强对操作系统深刻认识的需要。所以,我们从进程的创建和通信来了解一下实际编程中会碰到的一些问题。1.1.1进程进程的创建作为申请
本文标题:PostgreSQL--内核分析--多进程结构
链接地址:https://www.777doc.com/doc-5087898 .html