2010-01-17 44 views
3

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

如果100个用户同时点击页面,PHP会把这100个变量放入RAM中100次吗?或者它不知何故只将值存储在RAM 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

如果变量只是一个$变量,那么,在100个变量将被100个用户成倍增加。即使我们在计算会话存储时,在请求运行期间,这些变量也会存储在内存中$ _SESSION中。然而,我怀疑你真的需要担心,几个变量占用的空间量很少成为问题;许多大型PHP应用程序将为每个请求加载数千个变量,然后在请求结束时清除它们。 PHP的占用空间不是很大,并且内存控制更多地取决于您的PHP部署方法(mod_php vs CGI/FastCGI),而不是任何您运行的应用程序。

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

1

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