在这个测试中,我们可以看到golang的性能有时比scala慢得多。我认为,由于golang的代码直接编译成c/c++兼容的二进制代码,而scala的代码编译成JVM字节码,因此golang应该具有更好的性能,特别是在这些计算密集型算法的基准测试中。我的理解是否不正确?
在这个测试中,我们可以看到golang的性能有时比scala慢得多。我认为,由于golang的代码直接编译成c/c++兼容的二进制代码,而scala的代码编译成JVM字节码,因此golang应该具有更好的性能,特别是在这些计算密集型算法的基准测试中。我的理解是否不正确?
以下是我对四个基准测试中Go解决方案相对Scala解决方案较慢的原因的看法。
这张图表来自编程 Shootout。在把基准测试结果当做真理之前,请先阅读 Shootout 页面上的免责声明。最好的情况下,这些基准测试只能用于指示性能的大致期望。
话虽如此,JVM 已经进行了十年的资金充裕的优化,在启动时间以外,提供了出色的运行代码性能。Go 仍然是一种年轻的语言。能够在性能上接近 JVM 语言是令人印象深刻的。如果你喜欢用 Go 编程,不应该因为一个基准测试而拒绝使用它。
顺便提一下,考虑一下给定编程语言的不同版本基准测试之间的10x(!)速度差异。C gcc #7比C gcc #5慢8.3倍,而Ada #3几乎比Ada #5慢10倍。这些基准测试提供了语言之间比较的大致想法,但Go和Scala之间的差异在一个数量级内,这意味着运行时之间的任何“内在”变化可能会被实现差异所掩盖:此帖子描述了如何通过执行更智能的内存分配来加速程序11倍。也许编译器/运行时应该自动处理这种优化(JVM在某种程度上确实如此),但我不确定您是否真的可以从这些数字中得出“ Go比Scala慢(或快)”的结论。只是我的看法 :)
既然你似乎很热衷于看这些有偏见的基准测试,那么让我们来看一个真实的例子,而不是一些斐波那契数列的实现。
请查看这些web框架基准测试排名,它们使用本地客户端(如果可用)和开源软件(web framework) 进行测试,并使用相同语言的许多包进行测试。 测试范围从对原始字符串的请求到使用ORM查询数据库。
显然,Scala的性能远远不及Go,在所有测试中Scala都低于Go。尽管如此,基准测试与现实情况有很大差异,我建议您从工具/功能的角度或仅从最好解决问题的角度考虑一种语言。
正如Brad所指出的那样,这些结果来自于一个特定的基准测试套件。这提供了一些信息,但不要认为这是全部情况。了解源代码是否编写得足够好以提供最快的速度、最少的内存使用或其他目标目标将会很有帮助。
也许我们可以与另一个排名语言的网站进行比较。请看http://www.techempower.com/benchmarks/该网站对Web服务代码进行比较。尽管Go是一种年轻的语言,但在一些基准测试中表现最佳之一。
就像所有基准测试一样,它总是取决于您追求什么以及如何衡量它。