Как PHP обрабатывает переменные в оперативной памяти? - PullRequest
3 голосов
/ 17 января 2010

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

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

Ответы [ 3 ]

2 голосов
/ 17 января 2010

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

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

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

1 голос
/ 17 января 2010

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

1 голос
/ 17 января 2010

Вы можете поэкспериментировать с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...