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