PHP线程池?

问题描述 投票:6回答:7

我已安排CRON作业每4小时运行一次,需要收集用户帐户信息。现在,我希望加快速度并在多个进程之间拆分工作,并使用一个进程使用从其他进程检索到的数据来更新MySQL数据库。

在JAVA中我知道有一个线程池,我可以专门用一些线程来完成一些工作。

我怎么用PHP做到这一点?

欢迎任何建议。

谢谢

php multithreading concurrency
7个回答
1
投票

正如其他人所说,分叉过程比用PHP生成线程更容易。但是为什么你认为有一个专用线程将结果写回数据库是一个好主意?虽然这对于线程而不是进程稍微简单一些,但它仍然是一个复杂的开销,似乎没有为整体目标增加任何价值。

实际上,从cron启动脚本的几个实例(带有一些分区数据的参数)而不是从PHP代码中启动一个fork更简单 - 并且不用担心将数据记录回数据库的任何瓶颈。

C。


6
投票

PHP可能不是最适合多线程的语言。

您可能希望了解不同的解决方案。例如,Thrift允许您使用PHP后端与Java后端进行通信,您可以在其中轻松实现所需的行为。

如果您仍想在PHP中执行此操作,您可能需要查看:

http://www.php.net/pcntl

http://www.electrictoolbox.com/article/php/process-forking/


2
投票

PHP和Threads(这2个单词)不能在同一个句子中组合在一起。 PHP不提供线程支持。您可以尝试pcntl分叉机制或异步处理,在您的情况下没有帮助。

您可以通过查看Gearman(建议您谷歌)来使用可能是您想要的工作负载分配机制。

正如其他人所描述的那样“它是一个分布式分叉机器”,可以提供您正在寻找的工作负载分配,以“加快速度”。

问候,


0
投票

您也可以在PHP中分叉新进程:pcntl_fork()

BTW。该脚本运行时间超过4小时?否则,我认为没有理由为什么使用线程或进程管理使其复杂化。


0
投票

您还可以查看本文,其中介绍了如何模拟线程,包括使用异步HTTP调用的线程池管理器和Web服务器:

http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/


0
投票

好的过程池的Arbow on github修改提到here


0
投票

查看这些帖子 - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/

基本上你需要在进程之间共享数据,正如我所看到的,你可能需要先写一些文件。使用主进程获取(使其成为ajax-polling类型进程)并写入DB。

© www.soinside.com 2019 - 2024. All rights reserved.