我很好奇,PHP如何处理内存中的变量?如果我有100个常量或变量设置与我的应用程序,而不是在每个用户的基础上,如网站名称,版本号,这样的事情,这是所有用户具有相同的值保持值。

威尔PHP把这些100个变量到RAM 100倍,如果100个用户均创下在同一时间的页面?或做它在某种程度上仅存储在RAM 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

其他提示

如果变量只是一个$变量,那么,在100个变量将被100个用户相乘。即使我们在请求正在运行的计时会话存储,这些变量也存储在存储器中,在$ _SESSION。

不过,我怀疑你真正需要关心的,通过几个变量占用的空间量很少的问题;许多大型PHP应用程序将加载数千个变量为每个请求,然后清理出来的请求结束。 PHP的足迹是不是非常大,内存控制更可达PHP(mod_php的VS CGI / FastCGI的)的比什么都做你运行任何应用程序的部署方法。

要更具体,你的机器可以处理100个并发请求是否主要是无关的PHP脚本,作为PHP解释器通常需要最多比它运行的脚本更多的内存。但是,如果每个这些脚本加载一个非常大的文件转换成字符串(或大型数据库的结果集,等等),那么很可能你的脚本的内存使用是一个问题。然而,对于一般情况下,它的东西,归结到Web服务器的设置。

只有代码页的进程之间隐式共享。数据是单独为进程和组合线程除非明确通过例如重写SysV的共享存储器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top