代码之家  ›  专栏  ›  技术社区  ›  Teifion

比较运行时[关闭]

  •  1
  • Teifion  · 技术社区  · 16 年前

    我正在尝试对php和python(以及可能包含的任何其他语言)进行一些准确的运行时比较。脚本中的计时不是我的问题,但脚本中的计时并不能解释从请求运行脚本到输出的所有过程。

    1)是否真的值得考虑这些因素?

    2)假设值得考虑,我该怎么做?

    我使用的是Mac,所以我可以访问Linux命令,我不怕编译/创建命令来帮助我,我只是不知道如何编写这样的命令。

    3 回复  |  直到 10 年前
        1
  •  4
  •   Vinko Vrsalovic    16 年前

    如果你的想法是比较语言,我会说,它们之外的任何东西都与比较无关。

    尽管如此,您可以使用time命令测量所有内容,并将其与脚本中的时间进行比较。

    这样地:

    $ time script.php
    HI!
    
    real    0m3.218s
    user    0m0.080s
    sys     0m0.064s
    

    它将提供时钟时间、用户时间(PHP解释器)和系统时间(OS时间)

    如果您考虑的是Web,那么它会变得更加困难,因为您将混合Web服务器开销,并且如果您使用的是wsgi v/s mod_php,那么这并不总是容易比较的。然后你还得把探针钩到链条的腹板上。

        2
  •  1
  •   Loren Segal    16 年前
    1. 如果您正在优化代码,那么应该考虑速度。您通常应该知道优化代码的原因(如:现有代码库中的特定任务花费的时间太长,而不是“我听说PHP比Python慢”)。它是 如果你真的不打算换语言的话,值得考虑速度。仅仅因为一个小模块做得稍微快一点并不意味着用另一种语言重写你的应用程序是个好主意。除了速度,选择语言还有很多其他因素。

    2. 当然,你是标杆。多次运行这两个基本代码并比较计时。你可以使用 time 命令:如果两个脚本都可以从shell执行,或者使用每种语言各自的基准测试功能;后一种情况自然很大程度上取决于实际语言。

        3
  •  1
  •   Mike Stone    16 年前

    好吧,您可以使用“time”命令来帮助:

    you@yourmachine:~$ time echo "hello world"
    hello world
    
    real    0m0.000s
    user    0m0.000s
    sys 0m0.000s
    you@yourmachine:~$ 
    

    而这将绕过环境之外的时间安排。

    至于你是否真的需要加班…这完全取决于你在做什么。我假设这是针对某种类型的Web应用程序的,所以这取决于您使用的框架实际上是如何工作的…它是否缓存某种编译(或解析)版本的脚本?如果是这样,那么启动时间将完全不相关(因为第一次撞击将是唯一存在于启动时间中的撞击)。

    另外,请确保在循环中运行测试,这样您就可以折扣第一次运行(如果需要,还可以在报告中包含第一次运行的成本)。我在爪哇做了一些测试,第一次运行总是因为JIT做的工作最慢(并且在PHP、Python和你尝试的任何其他语言中都可能存在同样的命中)。