Как PHP обрабатывает переменные в оперативной памяти?

StackOverflow https://stackoverflow.com/questions/2080198

  •  21-09-2019
  •  | 
  •  

Вопрос

Мне интересно, как PHP обрабатывает переменные в памяти?Если у меня есть 100 наборов констант или переменных, которые содержат значения, относящиеся к моему приложению, а не для каждого пользователя, например имя сайта, номер версии и тому подобное, которые все пользователи имеют одинаковое значение.

Будет ли PHP помещать эти 100 переменных в оперативную память 100 раз, если 100 пользователей одновременно заходят на страницу?Или оно каким-то образом сохраняет значение в ОЗУ только 1 раз, и все пользователи этим питаются?

Это было полезно?

Решение

Вы можете поэкспериментировать с memory_get_usage() для мониторинга того, как обрабатывается память в ответ на определенные объявления.Например, я разработал следующее:

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

По сравнению с хранением в $_SESSION:

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

Другие советы

Если переменная просто $variable, то да, 100 переменных будут умножены на 100 пользователей.Даже когда мы подсчитываем хранилище сеанса, во время выполнения запроса эти переменные также сохраняются в памяти в $_SESSION.

Однако я сомневаюсь, что вам действительно стоит беспокоиться: объем места, занимаемого несколькими переменными, редко является проблемой;многие крупные PHP-приложения загружают тысячи переменных для каждого запроса, а затем очищают их в конце запроса.Размер PHP не очень велик, а управление памятью больше зависит от вашего метода развертывания PHP (mod_php против CGI/FastCGI), чем от любых приложений, которые вы запускаете.

Если быть более конкретным, то, может ли ваша машина обрабатывать 100 одновременных запросов, по большей части не связано с вашим PHP-скриптом, поскольку интерпретатор PHP обычно занимает гораздо больше памяти, чем сценарии, которые он запускает.Однако если каждый из этих сценариев загружает очень большой файл в строку (или большой набор результатов базы данных и т.п.), то возможно, что использование памяти вашим сценарием является проблемой.Однако в общем случае это зависит от настройки веб-сервера.

Между процессами неявно используются только кодовые страницы.Данные разделяются для процессов и объединяются для потоков, если это явно не переопределено, например, с помощьюОбщая память SysV.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top