今天在研究Druid连接池实现原理时,突然想到解释型的PHP的数据库连接池机制

发现一篇文章《PHP 数据库连接池实现 》

思路挺不错,用数组的pop()和push()实现了一个简单的连接池创建和回收的工作。


但仔细思考PHP的工作模式后,发现一些问题:

目前PHP的web项目常用web容器+php-fpm的方式构建。php-fpm作为一个php进程管理器,维护了一个php进程池, 在接收到请求后分发给php子进程。 php进程随着web容器启动后,一直存活。对于接收到的请求, 会做请求处理的相关初始化 -> 调用相应的php代码做业务操作 -> 销毁请求上下文。

因此, 每个请求的处理都是全新的Context。所以该文章的实现实际上是没有意义的。

但是,因为每个php进程都可以创建和使用一个数据库连接,且mysqli支持进程间重用数据库连接,估且可以把php-fpm看成数据连接池的一种实现方式。因此,有N个存活的php进程,就可以有<=N的数据库连接等待使用。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐