【问题标题】:PHP Concurrency via Cron通过 Cron 实现 PHP 并发
【发布时间】:2023-04-05 18:04:01
【问题描述】:

我有一些脚本需要作为单独的进程同时运行。我的计划是有一个 cron 作业,以设定的时间间隔执行这些脚本的多个实例。这是一个好主意吗?这种方法的优点/缺点是什么?我还需要考虑其他选择吗?

底线:我正在尝试模仿多线程。任何竞争条件都将通过代码处理(例如在 DB 中设置状态等)。脚本应该执行处理密集型任务(例如创建缩略图等)。

【问题讨论】:

    标签: php multithreading concurrency cron


    【解决方案1】:

    您可以使用分叉。启动脚本将加载所有默认配置和初始化,然后派生子进程进行处理。然后它可以监视进程以查看它们是否仍在运行。 http://php.net/manual/en/function.pcntl-fork.php

    【讨论】:

      【解决方案2】:

      好吧,如果您需要它作为 cronjob,请继续。如果您需要多个进程,您很可能希望使用pcntl_fork 来创建同一脚本的多个实例。

      【讨论】:

        【解决方案3】:

        根据您希望以多快的速度对这些工作做出反应,以及您是否希望执行处理器密集型任务,那么您还可以使用排队系统分散该处理。如果您有多个内核/处理器,请查看 Gearmanbeanstalkd,每台机器有多个工作人员。

        【讨论】:

          【解决方案4】:

          PHP 没有fork() 吗?虽然这不是真正的多线程,但它是协同程序的一种基本方式。

          【讨论】:

            【解决方案5】:

            使用 cron 的一个缺点是它会以您设置的时间间隔执行脚本的副本,而不管已经运行了多少脚本进程。这意味着脚本需要一种相互通信的方式,以便最多同时运行 N 个脚本(多余的脚本可以立即退出)。

            cron 的替代方案可能是 supervisord,它将执行可配置数量的脚本并监视每个脚本,以便重新生成任何退出。

            【讨论】:

              猜你喜欢
              • 2015-04-05
              • 2015-09-24
              • 2018-05-13
              • 2011-03-30
              • 1970-01-01
              • 2021-02-17
              • 1970-01-01
              • 2011-08-22
              • 2013-08-31
              相关资源
              最近更新 更多