首頁 >php框架 >Swoole >swoole 記憶體會越來越大嗎

swoole 記憶體會越來越大嗎

(*-*)浩
(*-*)浩原創
2019-12-12 11:45:593749瀏覽

swoole 記憶體會越來越大嗎

Server記憶體管理機制

#Server啟動後記憶體管理的底層原理與普通php-cli程式一致。具體請參考Zend VM記憶體管理方面的文章。

局部變數                               (建議學習中: 局部回調 使用者所有重複教學符號

#11163,所有事件「所有「」」影片回調。不需要unset。如果變數是資源類型,那麼對應的資源也會被PHP底層釋放。

function test()
{
    $a = new Object;
    $b = fopen('/data/t.log', 'r+');
    $c = new swoole_client(SWOOLE_SYNC);
    $d = new swoole_client(SWOOLE_SYNC);
    global $e;
    $e['client'] = $d;
}

$a, $b, $c 都是局部變量,當此函數return時,這3個變數會立即釋放,對應的記憶體會立即釋放,開啟的IO資源檔案句柄會立即關閉。

$d 也是局部變量,但是return前將它保存到了全域變數$e,所以不會釋放。當執行unset($e['client'])時,並且沒有任何其他PHP變數仍然在引用$d變量,那麼$d就會被釋放。

全域變數

在PHP中,有3類全域變數。

使用global關鍵字宣告的變數

使用static關鍵字宣告的類別靜態變數、函數靜態變數

PHP的超全域變量,包含$_GET、$_POST 、$GLOBALS等

全域變數和對象,類別靜態變量,保存在Server物件上的變數不會被釋放。需要程式設計師自行處理這些變數和物件的銷毀工作。

class Test
{
    static $array = array();
    static $string = '';
}
function onReceive($serv, $fd, $reactorId, $data)
{
    Test::$array[] = $fd;
    Test::$string .= $data;
}

在事件回呼函數中需要特別注意非局部變數的array型別值,某些操作如TestClass::$array[] = "string" 可能會造成記憶體洩漏,嚴重時可能會發生爆內存,必要時應注意清理大數組。

在事件回呼函數中,非局部變數的字串進行拼接操作是必須小心記憶體洩漏,如TestClass::$string .= $data,可能會有記憶體洩漏,嚴重時可能發生爆內存。

以上是swoole 記憶體會越來越大嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn