作者inav8dheart (在每個人的心裡)
看板PHP
標題[請益] DB with singleton
時間Wed Oct 10 16:21:00 2012
一直以來只要是看到 singleton 的介紹千篇一律都是介紹如何運用在 DB 連線上
但我有一點不解的地方,這種作法在大量使用者時適當嗎?
public static function getInstance()
{
if (!(self::$_instance instanceof self))
self::$_instance = new self();
return self::$_instance;
}
假設有 10 名使用者, 編號 1 的使用者率先連線上來,
由於 !(self::$_instance instanceof self) 成立, 因此會執行 new self();
而接下來的 9 名使用者則會直接 return self::$_instance
我不解的地方是: 這樣的作法等於是 10 名使用者在共用這個 $_instance
當這 10 名使用者同時間丟出請求時,不就得落入排隊的囧境?
那如果是 100人,1000人時,不就得等更久了?
如果是這樣, 那不如一人給他一條線不是更好嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.148.137
→ MOONRAKER:這看起來只是在目前執行空間(process space)中共用連線 10/10 18:06
→ MOONRAKER:吧。一百個人上來對到的應該是一百個新的apache process 10/10 18:07
→ MOONRAKER:你如果可以讓這一百個process共用連線,那就厲害了 10/10 18:08
推 mervynW:就跟樓上說得一樣, 不過process共用DB連線的話可以掛 10/11 09:48
→ mervynW:connecting pool. 在某方面是共用啦, 某方面 XDD 10/11 09:48
→ gpmm:connection pool 沒有比較快 or 省資源啊… XD 10/11 13:33
→ gpmm:還是要在 local 養一個 daemon ,而且這樣 php 需要過兩層 10/11 13:34
→ gpmm:話說回來,如果這些連線要 keep connecting 的話,那…嗯… 10/11 13:35
→ MOONRAKER:總之,除非還有什麼奇妙設計,否則原po的問題應該不存在 10/11 18:47
→ inav8dheart:謝謝大家...^^ 10/11 22:24