2014-01-12 19 views
0

我正在編程使用php和pthreads的應用程序,我注意到它沒有正常工作。爲了隔離錯誤,我減少了代碼,現在我有了這段代碼,並且檢查了它在通過控制檯執行時的行爲與打開Web瀏覽器時的行爲不同,我找不到爲什麼,我在這裏尋求幫助。該代碼是:不同的行爲在控制檯和瀏覽器中的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 

,並通過Web瀏覽器:

insidethread 
beforethread 

如果PHP一行通過網絡執行行,爲什麼我無法理解瀏覽器的代碼行爲不正確。任何幫助將不勝感激。謝謝。

回答

1

您不應該在響應請求的線程之外的任何線程在Web環境中寫入標準輸出。這是不安全的,至少你會遇到亂碼輸出和最壞的分段錯誤(因爲你從另一個線程填充stdout的緩衝區,這是不允許的,zend提供無法抽象這個)。

即使在控制檯,如果您想要理解輸出結果,在寫入stdout時應該使用互斥鎖。

相關問題