Mono虚拟机的当前性能如何?

lha*_*hne 9 .net mono performance

Web上充满了不同语言,编译器和虚拟机的各种性能测试.然而,几乎没有任何一个使用一些真实场景来测试性能.此外,在Google上搜索这些基准测试通常只会产生几年前的基准测试,因为他们有最多的时间收集链接.

您是否有任何人真正了解不同虚拟机的当前性能?另外我特别想知道如何单声道的效果的对比于那些微软的.Net和Sun的Java,以及如何不同的虚拟机的性能近来发展的.

mig*_*aza 12

衡量绩效是一件复杂的事情.过去,当语言针对同一操作系统进行测试时,运行相同的硬件和非常有限的库集,可以创建可以提供测量系统的线性度量的基准.它会让人们从0到10评估事物,同化结果并快速前进到下一个主题.

现代系统使事情变得更加复杂,因为需要考虑多个变量.

至少在Mono的情况下,有很多变量可以发挥作用:

  • 码:

    • 生成的本机代码的质量.
    • 生成本机代码的速度.
    • 生成代码和优化代码所需的内存
    • 代码生成器是多线程的
    • 生成的代码是否是线程安全的
    • 它是在编译时还是JIT时利用CPU特定功能.
    • 它是否可以使用SIMD指令(如果有).
    • 该语言是否巧妙地映射到多核平台
    • 该语言是否为优化程序提供了足够的参数来自动调整代码(与Fortran一样).
  • 内存管理:

    • 使用垃圾收集算法
    • GC是否可以使用多个CPU进行扩展?
    • GC增量还是实时?
    • 它是否支持线程本地存储以提高性能?
    • 它是精确的,紧凑的,世代的,保守的以及各自的混合物.
  • API设计:

    • API是否针对延迟或带宽而设计
    • API支持自动扩展到多个CPU.
    • 你能把重型工作卸载到GPU吗?
    • 您的API是否支持流接口

所有这些都非常复杂,并且很难给出一个简单的0到10的答案.

如果您要在类中对语言进行分区,并且假设一个称职且具有性能意识的程序员,我会在这些类中划分世界:

  • 第1层:由专业人员手动调整汇编语言
  • 第2层:静态编译的强类型语言:C/C++/Fortran /
  • 第3层:托管/ JIT语言:Java/C#/ .NET/Mono/Boo/F#
  • 第4层:动态类型/ JITed语言:Google V8,IronPython,IronRuby
  • 第5层:纯解释语言:Python,Perl
  • 第6层:纯粹的解释语言,有太多的功能为自己的好.

但是这些语言并没有描绘出整个画面,您将使用的API,托管操作系统和其他设施将对您的结果产生重大影响.

例如,最近在Mono中,我们增加了对使用更高级,高度优化的引擎(LLVM引擎)替换Mono代码引擎的支持.事实证明,找到一个使用LLVM的开销值得额外内存使用的测试非常困难:桌面和Web应用程序没有表现出太大差异.这可能是因为这些主要是受I/O限制的应用程序.

使用LLVM对于科学和计算密集型应用程序非常有用,但在现实生活中它与Mono的默认优化设置没有多大区别.

至于Mono的细节:尽管Mono确实使用了Boehm的GC,但大多数人都没有意识到Boehm可以通过各种方式进行配置.默认的外行配置确实不是很强大,但它适用于想要快速GC的每个人.Mono在这种模式下不使用Boehm,Mono广泛配置Boehm以在精确模式下工作,同时利用线程本地存储,多核GC和释放内存到操作系统模式.

  • 感谢Miguel,但你不敢做的是提供任何真实的性能测量.特别有趣的是在rails/cakephp/etc上单声道与红宝石的asp.net mvc的性能.在同一台服务器上运行. (2认同)

Joe*_*oey 2

要比较 Java 和 Mono,您可以查看计算机语言基准游戏