(99+ 封私信 / 9 条消息) 为什么 PostgreSQL 要使用多进程这么落后的并发模型而不是多线程呢? - 知乎 (zhihu.com)
经过实验,PostgreSQL有多个用户连接时, 当有一个用户的后台进程CRASH,一般段错误之类的原因退出时,其它用户的后台进程也会退出,这是postmaster通知它们这么做的。
但是,此时其它后台进程,例如postmaster,walwriter,logical replication launcher等等不会退出,这一做是为了保证用户读写数据库的一致性。
从这个角度看PG的多进程模型,的隔离程度并不是那么高,但是相对于线程,还是有一定隔离性的,例如,虽然用户连接后台进程都退出了,但是其它后台进程没有退出,用户重新连接即可,而线程模型,整个数据库服务器端都退出了,所有服务不可用,用户无法重新连接。
另外PG如果用户后端进程正常退出,例如用kill或pg_terminate_backend(),则不会导致其它用户的后端退出。