區別在於當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