我目前正尝试在 php 中实现一个作业队列。然后队列将作为批处理作业处理,并且应该能够并行处理一些作业。
我已经做了一些研究并找到了几种实现它的方法,但我并没有真正意识到它们的优缺点。
例如通过 fsockopen
多次调用脚本来进行并行处理,如下所述:
Easy parallel processing in PHP
我发现的另一种方法是使用 curl_multi
函数。
curl_multi_exec PHP docs
但我认为这两种方法会增加在应该主要在后台运行的队列上创建批处理的大量开销?
我还阅读了有关 pcntl_fork
的内容,这似乎也是一种处理问题的方法。但是,如果您真的不知道自己在做什么(就像现在的我),那看起来会变得非常困惑。
我还查看了 Gearman
,但在那里我还需要根据需要动态生成工作线程,而不仅仅是运行一些然后让 gearman 作业服务器将其发送到免费的工作人员。特别是因为线程应该在一个作业执行后干净地退出,以免遇到最终的内存泄漏(在那个问题上代码可能并不完美)。
Gearman Getting Started
所以我的问题是,您如何在 PHP 中处理并行处理?你为什么选择你的方法,不同的方法有哪些优点/缺点?
最佳答案
我使用 exec()
。它简单而干净。您基本上需要构建一个线程管理器和线程脚本,这将满足您的需求。
我不喜欢 fsockopen()
因为它会打开一个服务器连接,这会建立并可能达到 apache 的连接限制
出于同样的原因,我不喜欢 curl
函数
我不喜欢 pnctl
因为它需要可用的 pnctl 扩展,而且你必须跟踪父/子关系。
从来没有玩过gearman...
关于php - PHP 中的并行处理 - 你是怎么做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107339/