我正在開發一個網絡應用程序,我在端口上偵聽並在新的連接請求到達時創建一個新的套接字和線程;該架構運行良好,但我們正面臨嚴重的內存問題。PHP pthreads內存問題
問題是,即使我創建了一個單獨的線程,但它的工作,但內存不斷增加。
爲了演示這個問題,請查看下面的代碼,我們在其中啓動一個類的職責,它的職責是無限打印一個線程ID和一個隨機數。
class ThreadWorker extends Thread {
public function run() {
while(1) {
echo $this->getThreadId()." => ".rand(1,1000)."\r\n";
}
}
}
$th = new ThreadWorker();
$th->start();
我開發它在Windows操作系統上,當我打開任務管理器的PHP.EXE內存使用量不斷增加,直到系統變得反應遲鈍。
請注意,PHP腳本是從命令行下執行:
PHP.exe pthreads-test.php
您是否在創建0和1線程的情況下測試了代碼? php.exe如何執行? (只是改變for循環的最高值) – Claudix 2014-09-06 10:15:30
@Claudix如果我只是創建一個線程而不是100,那麼結果是完全相同的。讓我改變例子。 – 2014-09-06 10:17:49
現在嘗試將線程的while(1)'循環(即刪除echo命令)留空。然後會發生什麼? – Claudix 2014-09-06 10:24:50