3

我很好奇 PHP 如何处理内存中的变量?如果我设置了 100 个常量或变量来保存与我的应用程序相关的值,而不是基于每个用户,比如站点名称、版本号等,所有用户都具有相同的值。

如果 100 个用户同时访问该页面,PHP 会将这 100 个变量放入 ram 中 100 次吗?还是它以某种方式仅将值存储在 RAM 1 中,而所有用户都以此为食?

4

3 回答 3

2

如果变量只是一个 $variable,那么是的,这 100 个变量将乘以 100 个用户。即使我们计算会话存储,在请求运行期间,这些变量也存储在内存中,在 $_SESSION 中。

但是,我怀疑您是否真的需要担心,几个变量占用的空间量很少成为问题;许多大型 PHP 应用程序会为每个请求加载数千个变量,然后在请求结束时清除它们。PHP 占用空间不是很大,内存控制更多取决于您的 PHP 部署方法(mod_php 与 CGI/FastCGI),而不是与您运行的任何应用程序有关的任何事情。

更具体地说,您的机器是否可以同时处理 100 个请求与您的 PHP 脚本几乎无关,因为 PHP 解释器通常比它运行的脚本占用更多的内存。但是,如果这些脚本中的每一个都将一个非常大的文件加载到一个字符串(或一个大型数据库结果集等)中,那么您的脚本的内存使用可能是一个问题。然而,对于一般情况,这取决于网络服务器的设置。

于 2010-01-17T06:46:11.877 回答
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
于 2010-01-17T06:45:57.863 回答
1

只有代码页在进程之间隐式共享。数据对于进程是分开的,而对于线程是组合的,除非这通过例如 SysV 共享内存显式覆盖。

于 2010-01-17T06:47:21.947 回答