PHP线程和同步

6

我刚接触PHP,为了入门,我决定实现一个单例模式。

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

PHP是否需要实现双重检查锁定?我在某个地方看到过PHP不支持多线程,这是真的吗?有人能确认一下吗?

如果PHP支持多线程,有人能向我解释一下lock()或synchronize()在PHP中如何工作吗?

谢谢, Henry

1个回答

17

共享无存在架构

PHP有一个共享无存在架构

  • 像HTTP一样,每个请求都是独立的
  • 共享数据被推到数据存储层
  • 避免使用前置控制器

这给我们带来了:

  • 负载均衡的能力
  • 从一个数据中心到另一个数据中心的无缝故障转移
  • 更好的应用程序模块化
  • 更易于开发和调试

双重检查锁定

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

通常数据库层负责此操作。例如,MySQL(innodb)标准具有行级locking(这应该足够了)。

InnoDB在行级别上进行锁定,并默认以Oracle风格运行查询作为非锁定一致性读取。

如果这还不够,则SQL也具有例如transactions使其发生。

Books Online将事务定义为“作为单个逻辑工作单元执行的操作序列”

分叉进程

就像幻灯片所说,PHP具有共享无架构(传统)的特点,这也意味着PHP没有线程模型。虽然您可以编译(默认情况下未启用)PHP以支持fork进程之间的通信。当您还编译Semaphore Functions时,您可以执行诸如sem_acquiresem_release之类的操作。但一般来说,这不适用于PHP。


PHP确实具有线程功能,有关信息请访问以下链接:https://dev59.com/_HVC5IYBdhLWcg3wsTbv - Joe Watkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接