php - PHP 中的并行处理 - 你是怎么做到的?

标签 php multithreading parallel-processing task-queue

我目前正尝试在 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/

相关文章:

php - Android HttpPost 从 PHP 脚本而不是 JSONArray 获取 NULL

php - 如何用PHP/MySQL插入大量数据?

java - 使用多线程或优先队列确定特定 API 调用优先级的方法?

c - OpenMP 中的高斯消除 - 无法并行化

perl - 如何在 Perl 测试套件中并行运行一些但不是所有测试?

javascript - 在jquery php中解析json数组

javascript - 使用 Onclick 调用 PHP 链接

c++ - C++ `free` 函数是线程安全的吗?

c++ - 事务中的线程信号

java - OutOfMemoryError 会导致线程死亡吗?