我已安排CRON作业每4小时运行一次,需要收集用户帐户信息。 现在我想加快速度并在多个进程之间拆分工作,并使用一个进程使用从其他进程检索到的数据来更新MySQL数据库。
在JAVA中我知道有一个线程池,我可以专门用一些线程来完成一些工作。
我如何在PHP中完成?
欢迎任何建议。
感谢
答案 0 :(得分:6)
PHP可能不是最适合多线程的语言。
您可能希望了解不同的解决方案。例如,Thrift允许您使用Java后端与Java后端进行通信,您可以在其中轻松实现所需的行为。
如果您仍想在PHP中执行此操作,可能需要查看:
答案 1 :(得分:2)
PHP和Threads(这两个单词)不能在同一个句子中一起出现。 PHP不提供线程支持。您可以尝试使用pcntl forking机制或异步处理,在您的情况下无效。
您可以通过查看Gearman(建议您使用google)来使用可能是您想要的工作负载分配机制。
正如其他人所描述的那样“它是一个分布式分叉机器”,可以提供您正在寻找的工作负载分配,以“加快速度”。
的问候,
答案 2 :(得分:1)
正如其他人所说,分叉过程比用PHP生成线程更容易。但是为什么你认为有一个专用线程将结果写回数据库是一个好主意?虽然这对于线程而不是进程稍微简单一些,但它仍然是一个复杂的开销,似乎没有为整体目标增加任何价值。
实际上,从cron启动脚本的几个实例(带有一些分区数据参数)比从PHP代码中启动一个fork更简单 - 而且不用担心任何记录数据的瓶颈进入数据库。
下进行。
答案 3 :(得分:0)
查看这些帖子 - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/
基本上你需要在进程之间共享数据,正如我所看到的,你可能需要先写一些文件。使用主进程获取(使其成为ajax-polling类型进程)并写入DB。
答案 4 :(得分:0)
您也可以在PHP中分叉新进程:pcntl_fork()
顺便说一句。该脚本运行时间超过4小时?否则,我认为没有理由将其与线程或流程管理混淆。
答案 5 :(得分:0)
您还可以查看本文,其中介绍了如何模拟线程,包括使用异步HTTP调用的线程池管理器和Web服务器:
http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/
答案 6 :(得分:0)
Arbow on github的好过程池 修改后提到here