Performance 读取环境变量是慢操作吗?

Performance 读取环境变量是慢操作吗?,performance,environment-variables,Performance,Environment Variables,如果使用环境变量比使用普通变量(脚本语言?)慢是正确的,那么如何解释呢?检索环境变量的值将引发系统调用。普通变量内置在您运行的语言中,将位于相同的地址空间中,甚至可能位于CPU寄存器中(取决于语言及其执行方式) 获取数据只是一次较长的旅行 话虽如此,在大多数情况下,速度可能不会太慢。除非您经常访问它们(例如,在紧密循环中不断使用环境变量,或者在每次web请求期间在web服务器上读取它们),否则我不会担心性能差异 编辑: 答案是,这取决于: 性能差异是否真正重要取决于具体情况。在所有情

如果使用环境变量比使用普通变量(脚本语言?)慢是正确的,那么如何解释呢?

检索环境变量的值将引发系统调用。普通变量内置在您运行的语言中,将位于相同的地址空间中,甚至可能位于CPU寄存器中(取决于语言及其执行方式)

获取数据只是一次较长的旅行

话虽如此,在大多数情况下,速度可能不会太慢。除非您经常访问它们(例如,在紧密循环中不断使用环境变量,或者在每次web请求期间在web服务器上读取它们),否则我不会担心性能差异

编辑:

答案是,这取决于:


性能差异是否真正重要取决于具体情况。在所有情况下,在花费大量时间担心性能差异之前,您可能应该首先针对您的具体情况衡量性能差异(什么语言?什么操作系统?如果您在本地缓存,是否会更快等等)。

取决于语言和解释器的设计。如果在初始化时读取环境并通过标准全局变量(如php中)公开,则不会有性能差异,缺点是程序中看不到对env变量的外部更改


但是,也有一些替代实现,它们虽然更“昂贵”,但除了性能之外,还具有优势。

您的意思是系统调用是缓慢的操作吗?为什么?它们不是一个简单、普通的函数吗?@Narek:no,它们并不总是那么简单:)根据您正在进行的特定调用(不确定是否存在环境变量,甚至可能取决于操作系统),它可能必须跨越进程和地址空间(用户->内核)的边界。你自己的应用程序中的一个函数不必这样做——它将处于相同的过程中,并且是相同的地址空间。谢谢,现在我明白了为什么它很慢了!只是我需要把你和马克·哈姆林的答案连在一起,这样才能得到全貌。这么多人投错了答案。首先,你的答案自相矛盾,所以这里有人错了。为了弄清楚我是谁进行了一个实验:我编写了一个检索env的测试用例。变量,然后我查看了系统调用列表。可以看出,在打印“检索前”和下一个打印变量之间没有系统调用。话虽如此,有些平台可能会有所不同,但总的来说,你所说的不一定是真的。几十纳秒的时间在解释脚本语言中是看不到的。@Hans:一个笼统的说法,尽管我同意:)请注意我在公认答案下的评论。我假设作者会编辑他们的答案,所以我没有理由写一个新的答案,但是我想我应该通知OP,就在这里。“但是有一些替代的实现,虽然更“昂贵”,但除了性能之外,还有优势。”-你能更详细地阐述这一点吗?正如你在回答中指出的,另一种方法是系统调用。虽然这将花费更长的时间,但您将获得当前值,而不是初始化时的值。