區別在於當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的確比不上jsp