PostgreSQL的postmaser的fork的学习体会

可以说,postmaster是PostgreSQL服务器端的总代理了。
通过它,把客户端的请求转给新生成的postgres 进程。

postmaster.c 的代码注释中有如下的描述:

When a request message is received, we now fork() immediately.

The child process performs authentication of the request, and    
then becomes a backend if successful.

This allows the auth code to be written in a simple single-threaded style 
(as opposed to the crufty "poor man's multitasking" code that used to be needed).    
More importantly, it ensures that blockages in non-multithreaded libraries 
like SSL or PAM cannot cause denial of service to other clients.

这个fork的方式是,只要有请求进来了,就fork一个进程。
然后,认证什么的都有这个进程自己来搞定。然后提出请求的客户端和这个postgres进程之间,该干嘛就干嘛。
每一对 客户端/postgres进程 和其他的 客户端/postgres进程之间互不干扰。

想想看,这么做确实有它的好处:
认证部分的代码可以尽量简化,不需要考虑锁定机制什么的。处理效率比较高,也没有排队什么的。
另外,如果一个postgres进程崩溃了,也不会影响另一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值