2011-09-18 119 views
1

如果使用環境變量比使用普通變量(在腳本語言中)慢是正確的,那麼它是如何解釋的?閱讀環境變量是慢操作?

+1

所需的十幾納秒時間在解釋型腳本語言中是不可觀察的。 –

+0

@Hans:一句話,我同意:) –

回答

5

檢索環境變量的值將引發系統調用。普通變量是內置於您正在運行的語言中的,它們將位於同一地址空間,甚至可能位於CPU寄存器中(取決於語言以及執行方式)。

這只是獲取數據的更長的旅程。

這就是說,它在大多數情況下可能不會明顯緩慢。除非您經常訪問它們(例如,在緊密的循環中不斷使用環境變量,或者在每個Web請求期間在Web服務器上讀取它們),否則我不會擔心性能差異。

+0

你的意思是系統調用是慢操作?爲什麼?他們不是一個簡單的普通功能嗎? – Narek

+1

@Narek:不,它們並不總是這麼簡單:)根據你所做的具體調用(不確定環境變量,即使這樣它可能會依賴操作系統),它可能不得不跨越進程和地址空間(用戶 - >內核)邊界。你自己的應用程序中的函數不需要這樣做 - 它將處於相同的進程和相同的地址空間。 –

+0

謝謝,我明白爲什麼它很慢!只是我需要連接你的和Mark Hamlin的答案纔能有完整的畫面。 – Narek

3

取決於語言&解釋器設計。如果在初始化時讀取環境並通過標準全局變量(如php)讀取環境,則不會出現性能差異,但缺點是程序中未顯示env變量的外部更改。

然而,還有其他的實現,雖然更「昂貴」,提供優勢,性能拋開。

+1

對於與語言有關的答案而言,+1是+1 –

+0

「然而,有些替代實現雖然更」昂貴「,但提供了優勢,而不考慮性能。」 - 你能詳細說明這一點嗎? –

+0

正如您在回覆中指出的,另一種替代方法是系統調用。雖然這將花費更長的時間,但您將獲得當前值,而不是初始化時的值。 –