java的Servlet和 php-fpm的区别 浅谈php为什么没有数据库连接池
起因今天看闲的时候看到了java的数据库连接池,做为一个PHP码农,突然想到为什以java有数据库连接池,而做了这么久的PHP,很少涉及到数据库连接池(不要跟我说Swoole ,我讨论的是php-fpm)?解惑百度了N久,弄清了一点眉目, 这里做一下记录从运行的模式上来看php-fpm 是一个多进程单线程的模型, 也就是说当第一个请求到服务器的时候, php-fpm会开一个 进程,进程,是进程去处
起因
今天看闲的时候看到了java的数据库连接池,做为一个PHP码农,突然想到
为什以java有数据库连接池,而做了这么久的PHP,很少涉及到数据库连接池(不要跟我说Swoole ,我讨论的是php-fpm)?
解惑
百度了N久,弄清了一点眉目, 这里做一下记录
从运行的模式上来看
php-fpm 是一个多进程单线程的模型, 也就是说当第一个请求到服务器的时候, php-fpm会开一个 进程,进程,是进程去处理这个请求, 在这个进程中, 要是连接数据库的话, 就要新建一个数据库连接 , 访问完数据库后, 程序执行完成, 就消毁了所有资源, 当然,数据库连接也消毁掉了, 别的进程也同样是这样的操作,那么我们有疑问, 为什么用完了要消毁呢, 不消毁给别的进程用不就可以了吧, 呵呵, 对不起, 有个词儿叫 , 进程隔离, 本进程就算不消毁你也用不了,哈哈
java中的 servlet,和 php-fpm就不一样了, 它是一个单进程, 多线程的模型, 所有的请求来到服务器, 都交给了一个servlet进程中, 服务器再把请求分配到 这个servlet的一个线程中,所以请求是在 线程,线程,线程中, 即然这样的, 我们就可以在, 进程中创建一个数据库连接池 , 那么这个进程下的所有线程都可以使用到这个连接池, 因为子线程可以访问所在进程中的变量的,所以,java是可以使用连接池技术的
总结
因为 php-fpm 和 java servlet的运行模式的不同, 所以两种语言对 数据库连接池的需求有不一样, 欢迎大牛留言指正
更多推荐
所有评论(0)