区别在于当php以apache模块方式运行时, 因为apache有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql链接资源不被释放, 因而有下一个链接请求时就能够被复用.
这就使得在apache并发访问量不大的时候, 因为使用了pconnect, php节省了反复链接db的时间, 使得访问速度加快. 这应该是比较好理解的.
可是在apache并发访问量大的时候, 若是使用pconnect, 会因为以前的一些httpd进程占用的mysql链接没有close, 则可能会由于mysql已经达到最大链接着, 使得以后的一些请求永远得不到知足.
例如:
若mysql最大链接数设为500, 而apache的最大同时访问数设为2000
假设全部访问都会要求访问db, 并且操做时间会比较长
当前500个请求的httpd都没有结束的时候...以后的httd进程都是没法链接到mysql的(因已经达到mysql最大链接数). 只有当前500个httpd进程结束或被复用才能够链接获得了mysql.
若操做比较简单, pconnect比connect效率高不少, 并且跟使用jsp的链接池的速度比较接近. 由于这个时候httpd进程能够不断的给复用.
而 当DB操做复杂, 耗时较长时, 因httpd会fork不少并发进程处理, 而先产生的httpd进程不释放db链接, 使得后产生的httpd进程没法连上db. 由于这样没有复用其它httpd进程的mysql链接. 因而会就产生不少链接超时, 像一开始的1000个并发链接测试说几乎都是链接超时就是这个缘由.
(反进来看jsp用的若是是纯粹的db链接池, 则不会有由于达到mysql链接上限而连不上的问题, 由于jsp的链接池会使得能够等待其它链接使用完毕并复用. )
所以在并发访问量不高时,使用pconnect能够简单提升访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了..
就我我的认为, php如今对mysql的链接并无真正用到链接池, pconnect也只是至关于借了apache的进程池来用, 因此在并发访问量大的时候pconnect并不能很好的提升访问DB效率. 在这一点上. php的确比不上jspphp