PHP がメモリ内の変数をどのように処理するのか興味がありますか? サイト名、バージョン番号など、すべてのユーザーが同じ値を持つ、ユーザーごとではなく、アプリケーションに関連する値を保持する 100 個の定数または変数セットがあるとします。
100 人のユーザーが同時にページにアクセスした場合、PHP はこれらの 100 個の変数を 100 回 RAM に配置しますか? それとも、どういうわけか値をRAMに1回だけ保存し、すべてのユーザーがそれをフィードしますか?
変数が単なる $variable の場合、はい、100 個の変数に 100 人のユーザーが乗算されます。セッション ストレージをカウントしている場合でも、リクエストが実行されている間、これらの変数はメモリの $_SESSION にも格納されます。
ただし、本当に心配する必要があるとは思えません。いくつかの変数が占有するスペースの量が問題になることはめったにありません。多くの大規模な PHP アプリケーションは、リクエストごとに数千の変数をロードし、リクエストの最後にそれらを消去します。PHP フットプリントはそれほど大きくなく、メモリ制御は、実行するアプリケーションとの関係よりも、PHP の展開方法 (mod_php と CGI/FastCGI) 次第です。
より具体的に言うと、マシンが 100 個の同時リクエストを処理できるかどうかは、PHP スクリプトとはほとんど関係ありません。PHP インタープリターは一般に、実行するスクリプトよりも多くのメモリを消費するからです。ただし、これらの各スクリプトが非常に大きなファイルを文字列 (または大きなデータベースの結果セットなど) にロードしている場合は、スクリプトのメモリ使用量が問題になる可能性があります。ただし、一般的なケースでは、Web サーバーのセットアップに帰着します。
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 共有メモリなどを介して明示的にオーバーライドされない限り、データはプロセス用に分離され、スレッド用に結合されます。