我刚接触PHP,为了入门,我决定实现一个单例模式。
虽然我能够在PHP中重新创建单例模式,但我不确定如何实现双重检查锁定。
PHP是否需要实现双重检查锁定?我在某个地方看到过PHP不支持多线程,这是真的吗?有人能确认一下吗?
如果PHP支持多线程,有人能向我解释一下lock()或synchronize()在PHP中如何工作吗?
谢谢, Henry
我刚接触PHP,为了入门,我决定实现一个单例模式。
虽然我能够在PHP中重新创建单例模式,但我不确定如何实现双重检查锁定。
PHP是否需要实现双重检查锁定?我在某个地方看到过PHP不支持多线程,这是真的吗?有人能确认一下吗?
如果PHP支持多线程,有人能向我解释一下lock()或synchronize()在PHP中如何工作吗?
谢谢, Henry
PHP有一个共享无存在架构:
- 像HTTP一样,每个请求都是独立的
- 共享数据被推到数据存储层
- 避免使用前置控制器
这给我们带来了:
- 负载均衡的能力
- 从一个数据中心到另一个数据中心的无缝故障转移
- 更好的应用程序模块化
- 更易于开发和调试
但我不确定如何实现双重检查锁定。
通常数据库层负责此操作。例如,MySQL(innodb)标准具有行级locking(这应该足够了)。
InnoDB在行级别上进行锁定,并默认以Oracle风格运行查询作为非锁定一致性读取。
如果这还不够,则SQL也具有例如transactions使其发生。
Books Online将事务定义为“作为单个逻辑工作单元执行的操作序列”
就像幻灯片所说,PHP具有共享无架构(传统)的特点,这也意味着PHP没有线程模型。虽然您可以编译(默认情况下未启用)PHP以支持fork进程之间的通信。当您还编译Semaphore Functions时,您可以执行诸如sem_acquire和sem_release之类的操作。但一般来说,这不适用于PHP。