【问题标题】:php waiting between two operation (multi-threading)php 在两个操作之间等待(多线程)
【发布时间】:2013-07-16 23:49:52
【问题描述】:

我有这样的代码结构

   echo "First Operation";
   sleep(3);
   echo "Second Operation";

我想尝试模拟多线程但我无法制作,sleep 功能在那里毫无意义,但我找不到其他选项。

【问题讨论】:

  • 如何“模拟”多线程? PHP 没有多线程,除了 Apache 的 MPM worker。
  • 我知道,这就是我“尝试”的原因:D
  • 但是……你到底想做什么? PHP 只会从脚本顶部向下工作。没有办法改变它。你如何模拟你无法改变的东西?
  • stackoverflow.com/questions/12394027/…,也许你会在那里找到一些指针
  • 只要您在 CLI 上,就可以进行分叉(类似于多线程)。 php.net/manual/en/function.pcntl-fork.php

标签: php multithreading


【解决方案1】:

我必须同意 PHP 不是为多线程而构建的。因此,您创建的脚本将始终在一个线程中运行。有一些例外。当您调用 shell 命令时,当您不需要输出时,可能会触发并忘记该命令。它并行运行,但您无法访问结果。

PHP 被设计成一个接一个地执行一条指令。

要创建类似并行工作脚本的东西,您需要利用一些外部系统。所有这些技巧都与您想要完成的实际解决方案有关。让我给你举个例子。

您可以使用像 Rabbit MQ 这样的消息队列系统来分隔一个脚本和另一个脚本。假设 script1 一直在队列中监听工作。另一个脚本,比方说 script2,是(根据要求)将一项工作放入队列并继续处理其他工作,而 script1 正在接收该工作,做某事并返回答案。当 script2 处理完其他内容后,它可以从队列中读取结果并完成您想做的任何事情。

这实际上是一个非常棘手的理论概念,但它可能会给你一个想法。但是如果没有队列这样的外部组件,php 将无法多线程工作。

希望对你有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多