我很好奇PHP如何处理内存中的变量?如果我有100个常量或变量设置保存与我的应用程序相关的值而不是基于每个用户,例如站点名称,版本号等,所有用户都具有相同的值。
如果100个用户同时点击该页面,PHP会将这100个变量放入ram 100次吗?或者它是否只是以某种方式将值存储在RAM 1中并且所有用户都将其存储起来?
答案 0 :(得分:2)
如果变量只是一个$变量,那么是的,100个变量将乘以100个用户。即使我们计算会话存储,在请求运行期间,这些变量也存储在$ _SESSION的内存中。
但是,我怀疑你真的需要担心,一些变量占用的空间量很少是一个问题;许多大型PHP应用程序将为每个请求加载数千个变量,然后在请求结束时清除它们。 PHP的占用空间并不是非常大,内存控制更多地取决于PHP的部署方法(mod_php与CGI / FastCGI),而不是与您运行的任何应用程序有关。
更具体地说,您的计算机是否可以处理100个并发请求与您的PHP脚本大多无关,因为PHP解释器通常比其运行的脚本占用更多内存。但是,如果这些脚本中的每一个都将非常大的文件加载到字符串(或大型数据库结果集等)中,则可能是您的脚本的内存使用受到关注。然而,对于一般情况,它归结为网络服务器的设置。
答案 1 :(得分: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
答案 2 :(得分:1)
只有进程之间隐式共享代码页。数据对于进程是分开的并且对于线程组合,除非通过例如明确地覆盖它。 SysV共享内存。