PHP里的单例模式一般的写法
public static function getInstance () {
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
但是网上查到的资料都是 强调 java 里面使用单例模式的时候需要使用线程安全的写法
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
所以想请问下PHP的这种单例写法,是因为PHP内部有其他处理已经做到线程安全,还是说这样并不安全,有其他更完善的写法补充。。。求教=。=,感谢
大致php-fpm处理流程
当客户端发送一个请求时,web server会通过一个php-fpm进程(这里和下文所说指的fpm进程都是fpm开启的worker进程,关于fpm的工作原理这里不再累述)去执行php代码,php代码的执行是单线程的。
那么,当有多个客户端同时发送请求时(并发),web server就会为每个请求开启一个php-fpm进程去执行php代码。
请求执行过后,对应的php-fpm进程被销毁,内存得以释放。
而并发的问题在于,在某一时间,客户端请求让php-fpm进程数量达到了最大限制数,这个时候,新来的请求只能等待空闲的php-fpm来处理,这就是多进程同步阻塞模式的弊端,当然还有进程过多所带来的内存占用问题。