Maison > cadre php > Swoole > le corps du texte

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

(*-*)浩
Libérer: 2019-12-12 11:45:59
original
3733 Les gens l'ont consulté

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;
}
Copier après la connexion

$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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal