Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 谷歌的业绩';我们走吧?_Performance_Go - Fatal编程技术网

Performance 谷歌的业绩';我们走吧?

Performance 谷歌的业绩';我们走吧?,performance,go,Performance,Go,有人用过谷歌的围棋吗?我想知道数学性能(例如flops)与使用垃圾收集器的其他语言相比如何。。。像Java还是.NET 有人对此进行过调查吗?谷歌做了一项研究,将Go与其他一些流行语言(C++、Java、Scala)进行了比较。他们得出的结论是,就绩效而言,这一点并不那么强: 引述关于围棋的结论: Go提供了有趣的语言特性,它还允许简洁和标准化的符号。这种语言的编译器还不成熟,这反映在性能和二进制大小上 为了提高性能,Go主要是用汇编语言编写的 基准通常不可靠,需要解释。例如,罗伯特·亨特的论

有人用过谷歌的围棋吗?我想知道数学性能(例如flops)与使用垃圾收集器的其他语言相比如何。。。像Java还是.NET


有人对此进行过调查吗?

谷歌做了一项研究,将Go与其他一些流行语言(C++、Java、Scala)进行了比较。他们得出的结论是,就绩效而言,这一点并不那么强:

引述关于围棋的结论:

Go提供了有趣的语言特性,它还允许简洁和标准化的符号。这种语言的编译器还不成熟,这反映在性能和二进制大小上

为了提高性能,Go主要是用汇编语言编写的


基准通常不可靠,需要解释。例如,罗伯特·亨特的论文看起来有缺陷。Go博客文章剖析了Hundt的观点。

你实际上在问几个不同的问题。首先,围棋的数学成绩将和其他任何东西一样快。任何编译成本机代码的语言(可以说甚至包括像.NET这样的JIT语言)在原始数学方面都会表现得非常好——尽可能快。简单的数学运算很容易编译成零开销形式。这是编译(包括JIT)语言比解释语言具有优势的领域

你问的另一个问题是关于垃圾收集的。在某种程度上,这是一个次要问题,如果你在谈论繁重的数学。这并不是说GC不会影响性能——实际上它会影响很多。但是对于紧密循环的常见解决方案是避免或最小化GC扫描。如果你在做一个紧密的循环,这通常是非常简单的——你只是重复使用你的旧变量,而不是不断地分配和丢弃它们。这可以将代码的速度提高几个数量级

至于GC实现本身——Go和.NET都使用标记和清除垃圾收集。微软在GC引擎中投入了大量精力和工程技术,我不得不认为从各方面考虑,它都相当不错。Go的GC引擎是一个正在进行的工作,虽然它并不觉得比.NET的架构慢,但Golang的人坚持认为它需要一些工作。Go的规范不允许析构函数,这一事实大大加快了速度,这可能就是它看起来没有那么慢的原因

最后,在我自己的轶事经历中,我发现Go的速度非常快。我已经编写了非常简单的程序,这些程序在我自己的基准测试中与来自一些长期存在且备受尊敬的开源项目的高度优化的C代码相比较,这些项目以性能为荣


关键在于并非所有的Go代码都是高效的,就像并非所有的C代码都是高效的一样。你必须正确地构建它,这通常意味着你所做的事情与其他语言不同。这里多次提到的是一个很好的例子。

理论性能:纯Go程序的理论性能介于C/C++和Java之间。这假设一个高级优化编译器,它还假定程序员利用语言的所有特征(如C、C++、java或go),并重构代码以适合编程语言。 实际性能(截至2011年7月):标准Go编译器(5g/6g/8g)目前无法为高性能数字代码生成有效的指令流,因此性能将低于C/C++或Java。这有多种原因:每个函数调用的开销只有两条额外的指令(与C/C++或Java相比),没有函数内联,平均质量寄存器分配,平均质量垃圾收集器,擦除绑定检查的能力有限,无法从Go访问向量指令,编译器不支持32位x86 CPU等上的SSE2

一句话:根据经验,用5g/6g/8g编译的纯Go实现的数字代码的性能要比C/C++或Java低2倍。预计未来的表现会更好


实用性能(2013年9月):与2011年7月推出的旧版Go相比,Go 1.1.2能够生成更高效的数字代码,但运行速度仍略慢于C/C++和Java。编译器甚至在32位x86 CPU上也使用SSE2指令,这会使32位数字代码运行得更快,很可能是由于更好的寄存器分配。编译器现在实现函数内联和转义分析。垃圾收集器也得到了改进,但仍不如Java的垃圾收集器先进。仍然不支持从Go访问向量指令


一句话:性能差距似乎足够小,Go在数值计算中可以替代C/C++和Java,除非竞争对手的实现使用的是向量指令。

这项研究完全是胡说八道,因为测试代码太糟糕了。一个小的代码优化将运行时间从56秒降低到3.8秒(实际上比C++版本快)。这项研究是用所有编程语言实现算法的。golang的博客文章没有说它有缺陷。我不会说是“谷歌”做了这项研究。这似乎表明,即使是“围棋”小组也参与了这篇论文。事实并非如此。正如@tylerl所指出的,博客文章显示,通过一些优化,运行时和内存消耗都可以减少@Elazar请阅读这篇文章:你错了,关于数字的表现。不同代码生成器的输出之间可能存在世界。Go的代码生成器非常简单,但如果这是您所需要的,它有一个快速的运行库。@Lothar:当然可以。但一般来说,没有。我找不到任何证据