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