PHP中的多线程

Har*_*lut 8 php apache multithreading

我正在尝试创建一个多线程PHP应用程序.我已经阅读了大量论文,解释了如何创建多线程.所有这些示例都建立在不同工作者PHP文件上的进程潜水之上.Actualy这也是我想要做但但有一个问题:)

甚至在30秒内划分的工作太多(这是执行时间限制)

我们在本地网络上使用多服务器环境来完成进程,因为进程没有相互链接或共享相同的内存.我们只需要解雇它们并让它们在确切的时间工作.每个过程的工作时间为0.5秒,但有可能工作30秒.

大多数示例都会启动PHP并等待结果.但不幸的是,在我的情况下,我不需要期待线程的结果.我只需要它来执行命令并将结果写入自己的数据库.

如何启动phps并等待它们为10000个进程工作?

附加信息:我知道PHP既没有多线程功能也没有为其构建.但是我们必须创建一种使用它的方法,例如我们可以将请求发送到http://server1/dothis.php?jobid = 5但是标准方法让我们等待结果.如果我们可以设法在不等待结果的情况下向此服务器发送请求,它将解决我们的问题,或者我们将需要完全不同的方法,例如使用c ++或qt的进程分隔符.

dmp*_*dmp 6

正如已经指出的,php不支持多线程.然而,正如tomaszsobczak所提到的,有一个库可以让你创建"线程"并使它们保持运行,并通过其他脚本重新连接它们以检查它们的状态等,称为" Gearman ".

从项目主页:"Gearman提供了一个通用的应用程序框架,可以将工作分配到更适合工作的其他机器或进程.它允许您并行工作,负载平衡处理,以及在语言之间调用函数,它可以在各种应用中,从高可用性的Web站点的数据库复制事件的运输.换句话说,它是如何分布式处理通信的神经系统".

Rasmus的博客在这里有一个很好的写作: 玩装备和你的情况,它可能只是解决方案,虽然我没有阅读任何深度测试案例...但有兴趣知道,所以如果你最终使用这个,请报告回来!


Pek*_*ica 5

正如评论所说,PHP中不可能实现多线程.但根据你的评论:

如果我们可以设法在不等待结果的情况下向此服务器发送请求,我认为这将解决我们的问题

您可以使用exec()启动PHP脚本以在后台运行,将脚本的输出重定向到其他位置(例如/dev/null).我认为这是你得到的最好的.从手册:

注意:如果使用此功能启动程序,为了使程序继续在后台运行,程序的输出必须重定向到文件或其他输出流.如果不这样做将导致PHP挂起,直到程序执行结束.

用户贡献评论中有几个注释和指针,例如,此片段允许在Windows和Linux平台上执行后台.

当然,该PHP脚本不会共享您运行的PHP脚本的状态或任何数据.您将必须初始化后台脚本,就像您要发出一个全新的请求一样.