作者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
1F:→ MOONRAKER:这看起来只是在目前执行空间(process space)中共用连线 10/10 18:06
2F:→ MOONRAKER:吧。一百个人上来对到的应该是一百个新的apache process 10/10 18:07
3F:→ MOONRAKER:你如果可以让这一百个process共用连线,那就厉害了 10/10 18:08
4F:推 mervynW:就跟楼上说得一样, 不过process共用DB连线的话可以挂 10/11 09:48
5F:→ mervynW:connecting pool. 在某方面是共用啦, 某方面 XDD 10/11 09:48
6F:→ gpmm:connection pool 没有比较快 or 省资源啊… XD 10/11 13:33
7F:→ gpmm:还是要在 local 养一个 daemon ,而且这样 php 需要过两层 10/11 13:34
8F:→ gpmm:话说回来,如果这些连线要 keep connecting 的话,那…嗯… 10/11 13:35
9F:→ MOONRAKER:总之,除非还有什麽奇妙设计,否则原po的问题应该不存在 10/11 18:47
10F:→ inav8dheart:谢谢大家...^^ 10/11 22:24