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