PHP线程和同步

ryh*_*ang 6 php singleton multithreading synchronize double-checked-locking

我是PHP的新手,所以要开始我已经决定实现一个单例.

虽然我能够在php中重新创建单例模式,但我不确定如何实现双重检查锁定.

这在PHP中是否可行/需要.我在某处读过PHP不是多线程的?有人可以证实吗?

如果它是多线程的,有人可以向我解释一下lock()或synchronize()在PHP中是如何工作的吗?

谢谢,亨利

Alf*_*red 17

无共享架构

PHP有一个无共享架构:

  • 与HTTP一样,每个请求都是不同的
  • 共享数据被下推到数据存储层
  • 避免前控制器

这给了我们:

  • 能够负载平衡
  • 从一个数据中心到另一个数据中心的不可见故障转移
  • 更好的模块化应用程序
  • 更容易开发和调试

双重检查锁定

但我不确定如何实现双重检查锁定.

通常,数据库层负责这一点.MySQL(innodb)标准具有例如行级锁定(这应该足够).

InnoDB在行级别上进行锁定,默认情况下以Oracle的方式运行查询作为非锁定一致性读取.

如果这还不够,SQL也有例如事务来实现这一点.

联机丛书将事务定义为"作为单个逻辑工作单元执行的操作序列"

分叉过程

就像幻灯片一样,PHP有一个Share-nothing-Architecture(传统),这也暗示了PHP没有线程(模型).尽管您可以编译(默认情况下未启用)PHP以支持可以相互通信的fork进程.当您还编译信号量函数时,您可以执行sem_acquiresem_release之类的操作.但一般来说这不适用于PHP.