[已解决] 请教 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处理流程

  1. 当客户端发送一个请求时,web server会通过一个php-fpm进程(这里和下文所说指的fpm进程都是fpm开启的worker进程,关于fpm的工作原理这里不再累述)去执行php代码,php代码的执行是单线程的。
  2. 那么,当有多个客户端同时发送请求时(并发),web server就会为每个请求开启一个php-fpm进程去执行php代码。
  3. 请求执行过后,对应的php-fpm进程被销毁,内存得以释放。
  4. 而并发的问题在于,在某一时间,客户端请求让php-fpm进程数量达到了最大限制数,这个时候,新来的请求只能等待空闲的php-fpm来处理,这就是多进程同步阻塞模式的弊端,当然还有进程过多所带来的内存占用问题。
php
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

PHP-FPM 压根不需要关注线程安全问题。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!