mysql_connect和mysql_pconnect区别(转)

php中mysql_pconnect()的实现方式:其实mysql_pconnect()自己并无作太多的处理,它惟一作的只是在php运行结束后不主动close掉mysql的链接。mysql_pconnect()与mysql_connect()的区别包括: cgi方式下:在php经cgi方式运行时pconnect和connect是基本没有区别的,由于cgi方式是每个php访问起一个进程,访问结束后进程也就结束了,资源也全释放了。
 
apache模块方式下: 

区别在于当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

相关文章
相关标签/搜索