题
我很好奇,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的共享存储器。
不隶属于 StackOverflow