ホームページ  >  記事  >  PHPフレームワーク  >  スウールの記憶はますます大きくなるのだろうか?

スウールの記憶はますます大きくなるのだろうか?

(*-*)浩
(*-*)浩オリジナル
2019-12-12 11:45:593728ブラウズ

スウールの記憶はますます大きくなるのだろうか?

#サーバーのメモリ管理メカニズム

サーバーの起動後のメモリ管理の基本原理は、サーバーのメモリ管理の原理と同じです。通常のphp-cliプログラム。詳細については、Zend VM のメモリ管理に関する記事を参照してください。

#Al ローカル変数

(推奨学習: Swoole ビデオ チュートリアル ) ## イベント回復関数が戻った後、すべてのローカル オブジェクトと変数が回復されます。設定を解除する必要はありません。変数がリソースタイプの場合、対応するリソースも 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 はすべてローカル変数です。この関数が返されると、これら 3 つの変数はすぐに解放され、対応するメモリもすぐに解放され、オープンされた IO リソース ファイル ハンドルはすぐに閉じられます。

$d もローカル変数ですが、戻る前にグローバル変数 $e に保存されるため解放されません。 unset($e['client']) が実行され、他の PHP 変数がまだ $d 変数を参照していない場合、$d は解放されます。

グローバル変数

PHP には 3 種類のグローバル変数があります。

グローバル キーワードを使用して宣言された変数

静的キーワードを使用して宣言されたクラス静的変数と関数静的変数

$_GET、$_POST、$ を含む PHP のスーパー グローバル変数GLOBALS など。

グローバル変数とオブジェクト、クラス静的変数、サーバー オブジェクトに保存されている変数は解放されません。プログラマは、これらの変数やオブジェクト自体の破棄を処理する必要があります。

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

イベント コールバック関数内の非ローカル変数の配列型の値には特に注意する必要があります。TestClass::$array[] = "string" などの特定の操作では、メモリ リークが発生する可能性があります。深刻な場合には、メモリ爆発が発生する可能性があるため、必要に応じて大きな配列をクリーンアップするように注意する必要があります。

イベント コールバック関数で非ローカル変数の文字列を連結するときは、TestClass::$string .= $data などのメモリ リークに注意する必要があります。メモリ リークが発生する可能性があり、深刻な場合はメモリ リークが発生する可能性があります。場合によっては、メモリ爆発が起こる可能性があります。

以上がスウールの記憶はますます大きくなるのだろうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。