V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SolidZORO
V2EX  ›  问与答

一个简单全局渲染性能测试(512x512像素,每像素10000个采样),C++ 1小时36分、Java 3小时18分、Python约18天、Ruby约351天。

  •  
  •   SolidZORO · 2011-12-12 23:46:28 +08:00 · 5555 次点击
    这是一个创建于 4733 天前的主题,其中的信息可能已经有所发展或是发生改变。
    28 条回复    1970-01-01 08:00:00 +08:00
    napoleonu
        1
    napoleonu  
       2011-12-13 00:03:58 +08:00
    一个简单的web服务器,python只要3秒

    python -m SimpleHTTPServer

    而C++却。。。。
    mywaiting
        2
    mywaiting  
       2011-12-13 00:10:43 +08:00
    这个......看来Ruby有点囧...........不过话说回来,动静态语言,这个本来就不是一个层次能够比较的,所以............
    SolidZORO
        3
    SolidZORO  
    OP
       2011-12-13 00:12:39 +08:00
    @napoleonu 哈哈哈,说得也是。物尽其用就好,期待chromeOS有Playstation级作品的那一天,基于html app才是跨平台的绝佳方案。
    skydark
        4
    skydark  
       2011-12-13 00:12:42 +08:00
    当python代码遇到速度瓶颈,找出最关键的20%替换成C模块。
    过早优化是万恶之源,这样做刚好能避免这一点。
    VYSE
        5
    VYSE  
       2011-12-13 00:12:56 +08:00
    @napoleonu C++只要双击NGINX,BTW 没C++哪来PYTHON
    SakagamiJun
        6
    SakagamiJun  
       2011-12-13 00:14:25 +08:00
    2010-07-07 00:20 by Milo Yip, 24717 visits, 收藏, 编辑


    硬件: Intel Core i7 [email protected](4 core, HyperThread), 12GB RAM
    操作系统: Microsoft Windows 7 64-bit

    那一年,chrome的版本号才跑到5…
    在windows下面ruby不是大大们都说蛋疼无比么…
    haohaolee
        7
    haohaolee  
       2011-12-13 00:19:15 +08:00
    那个时候ruby还没到1.9.x呢
    napoleonu
        8
    napoleonu  
       2011-12-13 00:21:48 +08:00
    @VYSE 哈哈,我不知道怎么说了哈。CPU是人脑设计的,不知道人脑运输速度是不是就要比CPU牛逼

    我只是想说这些比较好无聊。
    VYSE
        9
    VYSE  
       2011-12-13 00:33:49 +08:00
    @napoleonu Python也是人脑设计,不是C++设计的。
    这种就看写代码的来优化了,不同语言高效的代码根本不能照搬,C++的smallpt的确极其精炼,换到解释语言上肯定没法比,看JAVA都很快就不用说了,不编译时间消耗太悬殊。
    xiluo
        10
    xiluo  
       2011-12-13 00:46:36 +08:00 via Android
    这些实验对比数据只有xx论文才用到。旦疼
    AntiGameZ
        11
    AntiGameZ  
       2011-12-13 01:00:21 +08:00
    拿人民币拧螺丝,怕是搞坏1万张100块大钞,也没什么用吧?
    funcman
        12
    funcman  
       2011-12-13 02:06:08 +08:00
    原来V8比LuaJIT还快。
    killpanda
        13
    killpanda  
       2011-12-13 02:15:51 +08:00
    比起来没意义吧?
    rechtar
        14
    rechtar  
       2011-12-13 08:12:42 +08:00
    @VYSE 三个主流的 Python 实现 CPython、Jython、IronPython 分别是用 C、Java、C# 写的,跟 C++ 有半毛钱关系啊 =。=
    SolidZORO
        15
    SolidZORO  
    OP
       2011-12-13 08:40:54 +08:00
    @xiluo @killpanda 按作者原话就是【首先,要说一句,Google太强了,难以想像JsChome的渲染时间仅是IC++的16.12倍,C#的4.94倍。我有信心用JavaScript继续写图形、物理方面的博文了。】

    我的理解是,测试起来其实是有意义的,因为他给那些要用web语言写大型游戏的人一个参考,证明了JS的确可行,特别是chrome的V8上跑渲染已经非常不错了。

    如果你是一个游戏开发者,看到这组数据的时候,应该想都不用想就用JS引擎开发了,而不是ruby。
    est
        17
    est  
       2011-12-13 09:27:02 +08:00
    作者基本是用静态语言的思路在写动态语言。python能嵌套5层for,效率能不低吗?
    cngithub
        18
    cngithub  
       2011-12-13 09:39:27 +08:00
    作者关于Ruby的错误很多。

    1。不应采用ruby1.9.1,请改为ruby1.9.2或者ruby1.9.3。

    2。采用windows测试Ruby?

    3。已经有人纠正过他的语法错误了:


    楼主的Ruby实现有错误,第162行应为
    "isRR = (isUseRR and rand < obj.maxC)"
    (and不同于&&,结合优先级比等号更低)

    另外,Python版第201行最好改成
    "samps = int(int(sys.argv[1]) / 4)"
    否则在Python3下有问题。

    我的测试结果如下(每像素8次采样):
    Ruby 1.8.7p249 1494.3s
    Ruby 1.9.1p378 666.5s
    Ruby 1.9.2dev 458.0s
    Python 2.6.5 677.9s
    Python 3.1.2 445.1s

    可见Ruby性能并不差。并且另一方面,Ruby 1.9.2的
    内存占用只是Python 3.1.2的一半多一点。
    VYSE
        19
    VYSE  
       2011-12-13 12:31:27 +08:00
    @rechtar 没想这么多,NGINX也是C的,理论C实现效率更高吧。那么换成“没有C哪来PYTHON”
    keakon
        20
    keakon  
       2011-12-13 14:19:10 +08:00
    看到最下面的“楼主火星了”,我觉得很适合……

    有常识的人都不会在CPU为瓶颈的地方使用Python和Ruby……
    0bit
        21
    0bit  
       2011-12-13 14:31:00 +08:00
    我本来是想来吐槽@VYSE 那句“没C++哪来Python”的……想来想去,表示已无力吐槽
    VYSE
        22
    VYSE  
       2011-12-13 17:24:51 +08:00
    @0bit 更正后的“没有C哪来PYTHON”这句有任何问题么?
    0bit
        23
    0bit  
       2011-12-13 20:38:16 +08:00
    @VYSE 没有汇编哪来的C,没有机器语言哪来的汇编。010110的用机器语言去编,肯定效率最高,但是这样比较有意义吗?单纯的比较性能有意义吗?
    VYSE
        24
    VYSE  
       2011-12-13 21:02:58 +08:00
    @0bit “没有C哪来PYTHON”哪里有单纯比较性能的意思,是回复二楼拿PYTHON和C++比较。C是语言,PYTHON是C语言研发的解释器,就这么简单。
    上面我已经说了拿编译成机器码的语言和解释器比较不公平。
    “没有汇编哪来的C”这句,汇编是机器指令的注解形式,和C语言没有关系,可以说没有X86或其他ARCH哪来的C编译器,而不是C语言本身。
    0bit
        25
    0bit  
       2011-12-13 21:23:34 +08:00
    @VYSE 想了半天,先承认我说错了。我确实不是太了解,最早的C语言的编译器,是不是由汇编写的,有空得多看看历史去了。另外,我的主要的意思是,既然有的人都可以只直接比较执行效率,那么为什么就不能比较一下开发效率呢?难道就因为CPython的基础是C?那样的话,所有高级语言都给C跪下算了。
    VYSE
        26
    VYSE  
       2011-12-13 21:29:44 +08:00
    @0bit 有空多看看bootstrap概念,你确定C语言的编译器是汇编写的,不是bootstrap self compile?你确定70年代初的代码助记符是汇编?
    我哪里都没提到开发效率的问题,你怎么就直接比较开发效率了。一楼说PYTHON一个指令开HTTP SERVER,我说已有C程序HTTP SERVER,你怎么就联想到开发效率了?
    0bit
        27
    0bit  
       2011-12-13 22:22:02 +08:00
    @VYSE 我承认,确实是我理解错了。我就不继续再嘴硬反驳了。去看书去了,的确是更多的知识才能有更多的底气啊。
    VYSE
        28
    VYSE  
       2011-12-13 22:28:08 +08:00
    @0bit 不是谁错不错的问题,这种测试本来就是GEEK的玩具,谁有什么喜好肯定支持谁。
    我觉得争论至少比看书有意义,看书记不久,争论了解到的想记不住都难。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3401 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:53 · PVG 19:53 · LAX 03:53 · JFK 06:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.