2010-01-17 6 views
3

Je suis curieux de savoir comment PHP gère les variables en mémoire? Si j'ai 100 constantes ou variables définies qui contiennent des valeurs liées à mon application et non pas par utilisateur, comme le nom du site, le numéro de version, des choses comme ça, tous les utilisateurs ont la même valeur.Comment PHP gère-t-il les variables en RAM?

Est-ce que PHP va mettre ces 100 variables dans le ram 100 fois si 100 utilisateurs frappent la page en même temps? Ou est-ce que cela ne fait que stocker la valeur dans la RAM 1 fois et tous les utilisateurs se nourrissent de cela?

Répondre

1

Vous pouvez expérimenter avec memory_get_usage() pour surveiller la façon dont la mémoire est traitée en réponse à certaines déclarations. Par exemple, je travaillais la suivante:

echo memory_get_usage(); // 84944 
$var = "foo"; 
echo memory_get_usage(); // 85072 
unset($var); 
echo memory_get_usage(); // 85096 

comparaison de stockage dans $_SESSION:

echo memory_get_usage(); // 85416 
$_SESSION['var'] = "foo"; 
echo memory_get_usage(); // 85568 
unset($_SESSION['var']); 
echo memory_get_usage(); // 85584 
2

Si la variable juste une variable $, alors oui, seront multipliés les 100 variables par 100 utilisateurs. Même lorsque nous comptons le stockage de session, pendant le temps d'exécution de la requête, ces variables sont également stockées en mémoire, dans $ _SESSION.

Cependant, je doute que vous ayez vraiment besoin de vous inquiéter, la quantité d'espace occupée par quelques variables est rarement un problème; de nombreuses applications PHP volumineuses chargeront des milliers de variables pour chaque requête, puis les nettoieront à la fin de la requête. L'empreinte PHP n'est pas très grande, et le contrôle de la mémoire est plus à la hauteur de votre méthode de déploiement de PHP (mod_php vs CGI/FastCGI) que tout ce qui concerne les applications que vous exécutez. Pour être plus précis, si votre machine peut gérer 100 requêtes simultanées est la plupart du temps sans rapport avec votre script PHP, car l'interpréteur PHP prend généralement beaucoup plus de mémoire que les scripts qu'il exécute. Si, cependant, chacun de ces scripts charge un très gros fichier dans une chaîne (ou un grand ensemble de résultats de base de données, ou similaire), il est possible que l'utilisation de la mémoire de votre script soit un problème. Pour le cas général cependant, c'est quelque chose qui revient à la configuration du serveur web.

1

Seules les pages de codes sont implicitement partagées entre les processus. Les données sont séparées pour les processus et combinées pour les unités d'exécution, à moins que cela ne soit explicitement remplacé par le biais, par ex. SysV mémoire partagée.

Questions connexes