PHP訪問資料庫的問題標題要長。。。。。
一直糾結幾個問題
第一、就是瀏覽器給伺服器一個請求,伺服器端就會建立一個新的線程來處理相應的請求然後返回給瀏覽器嗎?
第二、
如果訪問的是如下代碼
$con = mysql_connect("localhost","peter","abc123");
if (!$con) die('Could not connect: ' . mysql_error());
$strsql="SELECT * FROM `gbook`";
// 執行sql查詢
$result=mysql_db_query("database", $strsql, $con);
// 擷取查詢結果
$row=mysql_fetch_row($result);
?>
那麼伺服器端就會建立一個新線程來執行這段代碼,進行資料庫連結和查詢
那麼如果有N個使用者在一分鐘內訪問,那麼就會在這一分鐘內建立N個線程,連結N次資料庫嗎?
在window下,mysql_connect這個函數應該調用的是.dll動態連結程式庫不,這樣的話每個使用者訪問一次都要重新連結一次資料庫,這樣效率高嗎?還是這幾個線程共用一次資料庫連結。。。
本人小白,大神勿噴啊,,
------解決思路----------------------
是新進程...
------解決思路----------------------
使用者訪問網頁, mysql就會建立一次串連。
------解決思路----------------------
1、每個 http 會話佔用一個獨立的進(線)程,這樣才能保證會話的獨立性
2、請注意載入和串連的區別,動態連結程式庫是只載入一次的,每個使用它的程式都對他產生一個串連
3、如果你設想若干進(線)程共用一個串連,並不是不可做到的。只是各進(線)程間的調度會異常複雜。你打算怎樣標識資料流來保證不會張冠李戴呢?
------解決思路----------------------
傳統web伺服器確實是一個請求一個線程,處理完就釋放掉
本身HTTP協議設計的目的就是解決web這種輕量高並發的需求
nginx貌似不是開線程,有效能更高的解決方案,有興趣百度下吧
資料庫連接也是線程獨立的
但現在很多地方都在使用“池”,比如記憶體池,線程池
意思是在伺服器和資料庫之間多加一層服務,它預先和資料庫申請好N個串連,儲存控制代碼並保持住,前面有伺服器要訪問資料庫的時候,直接使用已經串連好的控制代碼,用完放回去但不釋放