【发布时间】:2015-08-06 20:24:03
【问题描述】:
一些背景: 我正在用 php 构建一个服务器应用程序,它需要根据用户请求执行许多独立的任务。我的应用程序对速度有严格的要求,所以我想并行执行所有这些任务。
我查看了几种解决方案(例如 gearman、rabbitMQ、zeroMQ),并决定使用 zeroMQ(快速、良好的文档、灵活且不需要代理)。这为我解决了线程之间的通信/同步问题。
问题:
我只想在服务器收到请求时才启动任务(不要有一个长时间运行的进程)。所以我收到一个请求 -> 开始并行计算 -> 将计算结果返回给客户端。一个解决方案似乎是pcntl_fork 但是docs 提到在生产服务器环境中使用它存在一些问题,但并没有真正指定它们是什么?
我的另一个选择是使用proc_open,但我不太喜欢它,因为它需要我以某种方式对输入进行序列化,这似乎不如分叉灵活和快速。它比pcntl_fork 有什么优势吗?
还有其他解决方案吗(仍在使用 php :p)?
【问题讨论】:
-
您可能已经意识到,
PARALLEL处理是一个比临时分叉更复杂的问题。 [一个不错的帖子。][1] 您可能会重新考虑您的架构是否能够满足PARALLEL处理范例。否则,PHP/ZeroMQ组件将无法挽救该主要故障。如果是,ZeroMQ必须非常小心地设置,以便为真正的PARALLEL处理做好准备。 [1]:stackoverflow.com/a/27347539/3666197
标签: php parallel-processing zeromq pcntl