postgresql整体概况
PostgreSQL是用一个简单的"每个用户对应一个进程"的client/server 模型实现的。在这种模式里一个客户端进程只是与一个服务器进程联接。因为我们不知道具体要建立多少个联接,所以我们不得不利用一个主进程 在每次联接请求时派生出一个新的服务器进程来。这个主进程叫做postmaster,它监听着一个特定TCP/IP 端口等待进来的联接。每当检测到一个联接请求时,postmaster 进程派生出一个新的叫postgres的服务器进程。服务器任务(postgres进程)相互之间使用信号灯和共享内存进行通讯,以确保在并行的数据访问过程中的数据完整性。 介绍下包含后台服务器端代码的文件夹:src/backend ,整理其各子文件夹作用: 再来说说执行过程。 数据库一运行,主函数进去main->PostmasterMain-> ServerLoop 等待连接的到来。 PostmasterMain运行过程: postgresMain怎么被调用? 其一:main->PostgresMain if (argc > 1 && strcmp(argv[1],"--single") == 0) exit(PostgresMain(argc,argv,get_current_username(progname))); 其二:main->SubPostmasterMain->BackendRun->PostgresMain #ifdef EXEC_BACKEND if (argc > 1 && strncmp(argv[1],"--fork",6) == 0) exit(SubPostmasterMain(argc,argv)); #endif EXEC_BACKEND什么意思,还没看明白,主要是找不到定义的地方。有知道的请告知,谢谢。 PostgresMain运行过程如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |