關(guān)于數(shù)據(jù)庫這樣實例化多次mysql連接性能上會不會比只實例化一次好點
class Events
{
public static $db = ;
/**
* 進程啟動后初始化數(shù)據(jù)庫連接
*/
public static function onWorkerStart($worker) {
for ($i=0;$i<20;$i++) {
self::$db = new Connection("172.17.0.2", 3306, "backup", "123456", "test");
}
}
// 使用
self::$db->select("*")->from("test")->query();
你們是怎么用的 你們是不是做了數(shù)據(jù)庫連接池? 有沒有demo 給我參考下, 謝謝大神們
?
?
?
?
其實我知道上面這種方式不妥
?
應(yīng)為php是單進程 多少客戶端連接就會產(chǎn)生多少個進程?
用gateway的話 服務(wù)都是交給businessworker這個進程處理?
所以有沒有辦法把 數(shù)據(jù)庫連接交給businessworker這個進程 Events 直接讓businessworker 去操作數(shù)據(jù)庫 這樣是不是就能再businessworker上做連接池呢??
?
還要個問題就是每個worker進程?是通過什么形式維護各自連接的多個客戶端的?不同客戶端直接的信息是怎樣分割開來的?
@https://wenda.workerman.net/people/abcde123456?
首先你說的“關(guān)于數(shù)據(jù)庫這樣實例化多次mysql連接性能上會不會比只實例化一次好點”,你是怎么判斷的?
其次請仔細閱讀手冊10、支持對象或者資源永久保持
WorkerMan在運行過程中只會載入解析一次PHP文件,然后便常駐內(nèi)存,這使得類及函數(shù)聲明、PHP執(zhí)行環(huán)境、符號表等不會重復(fù)創(chuàng)建銷毀,這與Web容器下運行的PHP機制是完全不同的。在WorkerMan中,一個進程生命周期內(nèi)靜態(tài)成員或者全局變量在不主動銷毀的情況下是永久保持的,也就是將對象或者連接等資源放到全局變量或者類靜態(tài)成員中則當(dāng)前進程的整個生命周期內(nèi)的所有請求都可以復(fù)用。例如只要單個進程內(nèi)初始化一次數(shù)據(jù)庫連接,則以后這個進程的所有請求都可以復(fù)用這個數(shù)據(jù)庫連接,避免了頻繁連接數(shù)據(jù)庫過程中TCP三次握手、 數(shù)據(jù)庫權(quán)限驗證、斷開連接時TCP四次握手的過程,極大的提高了應(yīng)用程序效率。
應(yīng)為php是單進程 多少客戶端連接就會產(chǎn)生多少個進程
這個說法貌似是錯的。php默認是多進程單線程的吧。
另外有多少個客戶端連接就產(chǎn)生多少進程這個說法也不對。我的理解是一個進程可以處理多個連接,連接數(shù)不影響服務(wù)端進程數(shù)。