gpt4 book ai didi

php - PHP 的 pthreads 不在 Apache 中执行并行线程

转载 作者:可可西里 更新时间:2023-11-01 12:59:09 24 4
gpt4 key购买 nike

我正在使用 pthreads PHP 的扩展。当我在 Windows 上从 cmd 执行 PHP 脚本时,我得到了并行线程,但是当我从 Apache 调用相同的脚本时,我得到了不同的结果,在我看来它像是单线程执行。

我应该为 Apache 进行任何配置以获得像 cmd(并行)这样的响应吗?

class AsyncOperation extends Thread {
public function __construct($arg){
$this->arg = $arg;
}

public function run(){
if($this->arg){
for($i = 0; $i < 50; $i++) {
echo "Yoo " . $this->arg . "<br>\n";
}
}
}
}
$thread = new AsyncOperation("World ----------");
$thread2 = new AsyncOperation("Second -------------------------");
$thread->start();
$thread2->start();

for($i = 0; $i < 100; $i++) {
echo "Standard <br>\n";
}

$thread->join();
$thread2->join();

示例代码在 cmd 中给出响应,例如:

Yoo World ----------<br>
Yoo World ----------<br>
Yoo World ----------<br>
Standard <br>
Standard <br>
Yoo World ----------<br>
Yoo Second -------------------------<br>
Standard <br>
Standard <br>

在网络浏览器中:

Yoo World ----------
Yoo World ----------
Yoo World ----------
Yoo World ----------
...
Yoo Second -------------------------
Yoo Second -------------------------
Yoo Second -------------------------
Yoo Second -------------------------
...
Standard
Standard
Standard
Standard
...

更新:在不同的浏览器上我得到不同的结果;此问题可能与缓冲区有关,我将对此进行调查。

最佳答案

没有什么是模拟的,你正在执行真实的线程。

你不应该在 SAPI 模式下写线程的标准输出,你会遇到无法控制的意外行为和错误,有太多的环境和 SAPI 无法很好地涵盖它,所以根本没有涵盖,不要去做吧。

即使在 CLI 模式下,复杂代码的输出也会出现乱码,要解决这个问题,您可以在传递给所有负责编写标准输出的上下文的任何对象中定义一个 protected 方法,如果该方法是 protected 并且该对象是一个 pthreads,一次只有一个上下文能够写入标准输出...通过将标准输出交换为日志数据库,可以在 SAPI 环境中使用相同的对象...

关于php - PHP 的 pthreads 不在 Apache 中执行并行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com