为PHP并行线程中的Apache不执行并行线程(pthreads for PHP not execu

2019-08-17 05:58发布

我使用的是并行线程扩展库。 当我从执行PHP脚本cmd在Windows上,我得到的并行线程,但是当我调用同一个脚本的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>

在Web浏览器中:

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

更新:在不同的浏览器我得到不同的结果; 这个问题可能与缓冲区,我要去调查。

Answer 1:

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

你不应该写在SAPI模式的线程标准输出,你会遇到意外的行为和错误,这是不能被控制,有太多的环境和SAPI的覆盖很好,所以它不是盖的所有,不要做它。

即使在CLI的复杂的代码模式输出会出现乱码,要解决这个问题,你可以定义你传递给需要写标准输出的照顾,如果该方法是受保护的对象是并行线程的所有上下文的任何物体的受保护方法一个,只有一个上下文就能同时写入标准输出......同一个对象可以在SAPI环境通过交换标准输出日志数据库使用...



文章来源: pthreads for PHP not executing parallel threads in Apache