0. 相关头/源文件:
- bgworker.h
- logicallauncher.h
- launcher.c
- postmaster.c
- bgworker_internals.h
- ilist.h
1. 关于 background worker
-
background worker 是一个能够运行任意用户提供的代码,包括常规事务的进程。
-
通过
shared_preload_libraries
加载的任何外部模块均可注册一个 worker。Workers 也能够在运行时动态注册。
无论哪种情况,worker 进程均从postmaster
forked
而来,并运行用户提供的“main
”函数。此代码可能连接到数据库并运行事务。 Workers 可以无限期保持活跃,但在发生关闭或崩溃时将被终止。 -
若 postmaster 中的
fork()
调用失败,稍后会再次尝试。需注意,失败仅能是暂时的(因高负载、内存压力、进程过多等导致的 fork 失败);更永久性的问题,如连接数据库失败,会在 worker 中稍