我使用php和pthreads编写应用程序,我注意到它无法正常工作。为了隔离错误,我减少了代码,现在我有了这段代码,并且我已经检查过它通过控制台执行它的行为不同于网络浏览器,我找不到原因,我我在这里寻求帮助。代码是:
<?php
echo "beforethread<br/>";
class AsyncOperation extends Thread
{
private $sum;
public function __construct()
{
$this->sum = 5;
}
public function run()
{
echo "insidethread<br/>";
}
}
$thread = new AsyncOperation();
$thread->start();
$thread->join();
?>
通过控制台我得到:
beforethread
insidethread
并通过网络浏览器:
insidethread
beforethread
我无法理解php是否逐行执行为什么通过Web浏览器代码行为不正确。任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您不应该从响应请求的线程以外的任何线程在Web环境中编写标准输出。这是不安全的,至少你会遇到乱码输出和最坏的分段错误(因为你从另一个线程填充stdout的缓冲区,这是不允许的,zend没有办法抽象它)。
即使在控制台,如果你想了解你的输出,你应该在写入stdout时使用互斥锁。