php单例模式多进程,[已解决] 请教 PHP 的单例模式是线程安全的吗

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来处理,这就是多进程同步阻塞模式的弊端,当然还有进程过多所带来的内存占用问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值