2010-01-17 68 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共享內存。