我目前正在尝试在 php 中实现一个作业队列。然后队列将作为批处理作业处理,并且应该能够并行处理一些作业。
我已经做了一些研究并找到了几种实现它的方法,但我并没有真正意识到它们的优缺点。
例如,通过多次调用脚本来执行并行处理,fsockopen
如下所述:
Easy parallel processing in PHP
我发现的另一种方法是使用这些curl_multi
函数。
curl_multi_exec PHP 文档
但我认为这两种方法会增加在主要在后台运行的队列上创建批处理的开销?
我还阅读了pcntl_fork
这似乎也是一种处理问题的方法。但是,如果您真的不知道自己在做什么(就像我现在一样),那看起来会变得非常混乱。
我也看过Gearman
,但在那里我还需要根据需要动态生成工作线程,而不仅仅是运行一些,然后让 gearman 作业服务器将其发送给空闲工作线程。特别是因为在执行一项作业后线程应该干净地退出,以免最终发生内存泄漏(该问题中的代码可能并不完美)。
Gearman 入门
所以我的问题是,你如何处理 PHP 中的并行处理?你为什么选择你的方法,不同的方法可能有哪些优点/缺点?