【问题标题】:Higher level languages with C functions具有 C 函数的高级语言
【发布时间】:2010-07-06 21:41:12
【问题描述】:

也许以前有人问过这个问题,但我找不到。我的问题很简单:用高级语言(Java、C#、Python)和 C 中的时间/性能关键函数编写应用程序是否有意义?或者在这一点上,除非您进行非常低级别的操作系统/游戏/传感器编程,否则拥有完整的 Java 应用程序都是一样的?

【问题讨论】:

    标签: c performance


    【解决方案1】:

    如果您 a) 注意到性能问题,并且 b) 使用性能测量来定位问题发生的位置,并且 c) 无法通过修改现有代码来实现所需的性能,那么这是有道理的。

    如果其中任何一项不适用,则可能是过早的优化。

    【讨论】:

    • 他们还应该考虑在托管代码和本机代码之间的封送调用对性能造成影响时调用本机代码的频率。
    • 确实如此。一旦你决定尝试 C,你需要做更多的测量以确保它是正确的决定;)
    • 说真的,如果对程序员有任何通用的口头禅,那就是“先衡量再决定。”.
    • ...如果项目的性能是一个问题...否则口头禅可能会有所不同,以实现出色的可维护性和快速开发,例如
    【解决方案2】:

    如果您能流利地使用 Python 和 Lua 等高级语言并富有成效,那么请务必开始使用该语言进行写作。寻找瓶颈是否存在。

    【讨论】:

    • 改用[语言 X Y]!没有帮助,也没有回答他的问题。
    • 我没有说。我不明白反对票。我的意思是乐于助人。
    • 我认为 rlb.usa 完全误解了你的回答。
    【解决方案3】:

    速度可能与 C# 之类的东西非常相似。

    棘手的是延迟。所以如果你想写一些你知道需要

    话虽如此,对于非常紧凑的长循环(例如图像处理),C/C++ 之类的东西可以提供一些加速。你可以从 C# 中获得相当合理的性能,但你必须小心如何编程,但我发现总的来说,你仍然可以从 C/C++ 中榨取更多

    【讨论】:

      【解决方案4】:

      通常,您的首选语言会在可接受的时间内完成您需要的任何操作(呃,速度极快)。

      当然,关键时间/性能函数可以用“更优化/合适”的语言(如 C 或汇编)编写 - 但它是否真的会让事情变得更快是另一回事。有一些法律规定了您将获得多少实际/整体加速,特别是Amdahs Law and (diminishing returns)

      要回答您的问题,如果有足够好的加速来保证额外的工作,那么用低级语言重写这些关键函数才有意义。

      【讨论】:

        【解决方案5】:

        我建议你阅读 Cliff Click 的优秀 Java vs. C Performance....Again.。它概述了 Java 和 C++ 之间的许多比较点。

        可以预见,结论是视情况而定,但值得一读。

        【讨论】:

        • 他一般性地询问所有高级语言及其低级语言,而不是具体的 C/Java。
        • @rlb.usa:我相信 Java/C 是一个很好的开始,看到它们之间的界限相当模糊。
        • 阅读它,但对它持保留态度。如果您仔细阅读,很明显这是一个人一开始就试图声称 Java 普遍优越,并在一些明显错误的地方被指责。很多“视情况而定”的点是他也可能错的地方,但很难找到可靠的证据。
        • @Jerry - 我总是带着一点怀疑阅读博客文章,直到他们证明他们的“事实”来自哪里。
        • @ChaosPandion:当然,有些怀疑总是合理的——但这似乎比平时更有价值......
        【解决方案6】:

        你只能根据具体情况真正回答这个问题,如果不参考你在做什么,就不可能回答。

        但也许你在这里真正想要的是某种健全性检查,以确保这种方法不会疯狂考虑。我从事的工具从非常大的图形应用程序(约百万行)到相对较小的物理模拟引擎(约 10000 行),正如您所描述的那样编写:Python 在外部用于接口(用于 API 和 GUI) , C/C++ 里面的繁重工作。他们都从这种责任分工中受益。

        【讨论】:

          【解决方案7】:

          这尤其适用于脚本语言。想到的是用 Python 制作的游戏。大多数时候,对于游戏的一些更多的数字运算方面来说,Python 太慢了,他们将其作为一个 C 模块来提高速度。确保您确实需要速度,并且数字运算是您的性能瓶颈,而不是一般的算法问题。在 C 和 Python 中对列表进行蛮力搜索都会很慢。

          【讨论】:

            【解决方案8】:

            我想说这在很大程度上取决于您的应用程序。 什么样的表现很重要?启动时间短?高吞吐量?低延迟?响应时间总是可预测的重要吗? 应用程序是短命的还是长时间运行的?

            Java 可以为您提供高吞吐量,但在进行垃圾收集时偶尔会出现短暂的冻结。 C# 可能类似。 Python,好吧,对于任何不是用 C 编写的东西,那里的性能通常会落后于其他东西(有些东西是用 C 编写的,即使你不是自己写的)。

            正如其他人所说。这取决于。

            但与性能一样:首先衡量,当您知道需要时进行优化。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-05-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-14
              • 2019-12-12
              • 1970-01-01
              • 2021-03-14
              相关资源
              最近更新 更多