Maison  >  Article  >  cadre php  >  La mémoire swoole deviendra-t-elle de plus en plus grande ?

La mémoire swoole deviendra-t-elle de plus en plus grande ?

(*-*)浩
(*-*)浩original
2019-12-12 11:45:593734parcourir

La mémoire swoole deviendra-t-elle de plus en plus grande ?

Mécanisme de gestion de la mémoire du serveur

Le principe sous-jacent de la gestion de la mémoire après le démarrage du serveur est le même que celui programme php-cli ordinaire. Pour plus de détails, veuillez vous référer à l'article sur la gestion de la mémoire Zend VM.

Variables locales (Apprentissage recommandé : Tutoriel vidéo Swoole )

Une fois la fonction de récupération d'événement renvoyée, tous les objets et variables locaux seront recyclés . Pas besoin de désactiver. Si la variable est un type de ressource, la ressource correspondante sera également libérée par la couche inférieure de 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 sont toutes des variables locales. Lorsque cette fonction revient, ces trois variables seront immédiatement libérées, la mémoire correspondante sera immédiatement libérée et le handle du fichier de ressources IO ouvert sera. fermé immédiatement.

$d est également une variable locale, mais elle est enregistrée dans la variable globale $e avant le retour, elle ne sera donc pas publiée. Lorsque unset($e['client']) est exécuté et qu'aucune autre variable PHP ne fait encore référence à la variable $d, $d sera libéré.

Variables globales

En PHP, il existe 3 types de variables globales.

Variables déclarées à l'aide du mot-clé global

Variables statiques de classe et variables statiques de fonction déclarées à l'aide du mot-clé static

Variables super globales de PHP, notamment $_GET, $_POST , $ GLOBALS, etc.

Les variables et objets globaux, les variables statiques de classe, les variables enregistrées sur l'objet Serveur ne seront pas publiées. Les programmeurs doivent gérer eux-mêmes la destruction de ces variables et objets.

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

Vous devez porter une attention particulière à la valeur de type tableau des variables non locales dans la fonction de rappel d'événement. Certaines opérations telles que TestClass::$array[] = "string" peuvent provoquer des fuites de mémoire, et dans les cas graves, une explosion de mémoire peut se produire, il faut veiller à nettoyer les grands tableaux si nécessaire.

Dans la fonction de rappel d'événement, lors de la concaténation de chaînes de variables non locales, vous devez faire attention aux fuites de mémoire, telles que TestClass::$string .= $data, il peut y avoir des fuites de mémoire, et dans des cas graves Dans certains cas, une explosion de mémoire peut se produire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn