我的理解是PHP的p*连接是它在页面加载到服务之间保持连接(无论是内存缓存还是套接字等).但这些连接是否安全?当两个页面同时尝试访问同一个连接时会发生什么?
Wez*_*ong 11
在典型的unix部署中,PHP作为在apache Web服务器内运行的模块安装,而apache web服务器又配置为将HTTP请求分派给许多生成的子节点之一.
为了提高效率,apache通常会提前生成这些进程(预分配它们)并维护它们,以便它们可以分派多个请求,并为每个请求启动进程启动流程的开销.
PHP的工作原理是在干净的环境下启动每个请求; 页面加载之间没有脚本变量.(与mod_perl或python形成对比,其中应用程序通常会因意外的状态宿醉而出现细微的错误).
这意味着PHP脚本分配的典型资源,无论是GD的图像句柄还是数据库连接,都将在请求结束时释放.
某些资源(尤其是Oracle数据库连接)的建立成本非常高,因此需要以某种方式缓存调度的Web请求之间的连接.
输入持久资源.
这些工作的方式是任何给定的apache子进程可以通过将其注册在资源的"持久列表"中来维护超出请求范围的资源.持久列表在请求结束时不会被清除(在内部称为RSHUTDOWN).当您使用pconnect函数时,它将查找给定的一组唯一凭据的持久列表条目,并返回该条目(如果存在),或者使用这些凭据建立新连接.
如果已配置apache以维护200个子进程,则应该会看到从Web服务器到数据库计算机建立的许多连接.
如果您有许多Web服务器和单个数据库计算机,则可能会比预期更多地加载数据库计算机.
使用线程化的SAPI,每个线程都维护持久性列表,因此它应该是线程安全的并且具有类似的好处,但是关于不推荐在线程SAPI中运行的PHP的常见警告适用 - 虽然PHP本身是线程安全的,所以很多它使用的库可能存在自己的线程安全问题,并且会引起很多麻烦.
归档时间: |
|
查看次数: |
186 次 |
最近记录: |