|
|
1
99
6G和8G编译器并不是特别优化,因此它们生成的代码不是特别快。
它们的设计是为了运行得更快,并生成一些正常的代码(有一些优化)。
基准数据几乎完全与实施质量有关。它们与语言没有太大的关系,除非实现花费运行时来支持基准测试真正不需要的语言功能。在大多数编译语言中,一个足够聪明的编译器理论上可以去掉不需要的东西,但是有一点是你在操纵演示,因为很少真正的语言用户会编写不使用该特性的程序。将事物移开而不完全移除它们(例如,预测JIT编译的Java中的虚拟调用目的地)开始变得棘手。
fwiw是我自己的一个非常简单的测试,当我查看它(基本上是一个整数加法的循环)时,gccgo生成的代码接近于
|
|
|
2
50
在下一个版本的 Go FAQ ,应显示类似于以下内容的内容。
这里还有一些关于 The Computer Benchmarks Game 来自最近的邮件列表线程。 Garbage collection and performance in gccgo (1) Garbage collection and performance in gccgo (2) 重要的是要注意,计算机基准游戏只是一个游戏。在性能度量和容量规划方面有经验的人会谨慎地与like进行匹配,就像在现实和实际的工作负载上一样;他们不会玩游戏。 |
|
|
3
33
我的答案并不像其他人的答案那么技术化,但我认为它仍然是相关的。 当我决定开始学习Go时,我在计算机基准游戏上看到了相同的基准。但老实说,我认为所有这些综合基准对于决定Go是否足够快对您来说都是毫无意义的。 最近我使用tornado+tornadio+zmq在python中编写了一个消息服务器,对于我的第一个go项目,我决定在go中重写该服务器。到目前为止,我已经使服务器具有与Python版本相同的功能,我的测试显示Go程序大约提高了4.7倍的速度。请注意,我在Go中只进行了一个星期的编码,而且我用Python编码已经5年多了。 Go只会在他们继续处理它的时候变得更快,我认为实际上它取决于它在实际应用程序中的表现,而不是微小的计算基准。对于我来说,Go显然产生了一个比我在Python中所能产生的更高效的程序。这是我对这个问题的回答。 |
|
|
4
6
事情变了。 我认为现在对你的问题的正确答案是反驳“走得慢”的观点。在你询问的时候,你的判断是合理的,但是Go在表现方面获得了很多支持。现在,它仍然没有C快,但在一般意义上,它不是接近10倍慢的地方。 Computer language benchmarks game 在撰写本文时:
不过,在二叉树基准测试中,它确实遭受了巨大的损失:
|
|
|
5
5
尽管对CPU周期使用的效率不高,但是GO并发模型比Java中的线程模型快得多,并且可以与C++线程模型相媲美。 注意在 thread-ring benchmark ,开始是 16X 比Java快。在相同的情况下,Go-CSP几乎可以与C++相媲美,但是使用4X更少的内存。 Go语言的强大功能是它的并发模型、通信顺序进程、CSP,由TonyHoare在70年代指定,易于实现并适合高度并发的需求。 |
|
|
6
1
归根结底,需要多长时间来编写代码,而从开发的任何代码中获得最佳性能所需的工作又是多么少。其他的一切只是一种无聊的追求,与商业没有太大的关联……诸如此类。 Go使开发出色的服务更容易支持。爪哇…不管它的技术能力……梦魇来支持… 我写了一些Golang程序……就像一只鹅的粪便一样……而且如果我的任务是整天用严肃的数学来压缩……我不认为我会用Java或者去……我会用这样的语言设计的。 |
|
|
7
1
有两个基本原因,即Java比GO和C++更快,并且在很多情况下可以比C快。 1)JIT编译器。它可以基于运行时配置文件,通过多个级别(甚至是OO类)内联虚拟函数调用。这在静态编译语言中是不可能的(尽管基于记录的配置文件的更新的重新编译可以帮助)。对于大多数涉及重复算法的基准来说,这是非常重要的。 2)总承包商。与malloc相比,基于GC的内存分配几乎是空闲的。而且“免费”的惩罚可以在整个运行时进行分摊-经常被跳过,因为程序在需要收集所有垃圾之前终止。 有成百上千个?使GC/JVM高效的非常有才华的开发人员。认为你能“比所有代码都好”是愚蠢的。这是人类内心的一个自我问题——人类很难接受这样一个事实:通过有天赋的人类的适当训练,计算机将比编程的人类运行得更好。 顺便说一下,如果你不使用和使用OO特性,C++可以和C一样快,但是在C语言中,你非常接近于只开始编程。 最重要的是,这些测试中的“速度差”通常毫无意义。IO成本比性能差异大几个数量级,因此即使是在解释语言中,适当的设计也能将IO成本降到最低。很少有系统受CPU限制。 最后一点,人们将“计算机语言基准游戏”称为“科学措施”。例如,如果查看NBORD的Java测试,测试是完全有缺陷的。当我在同一操作系统/硬件上运行测试时,我得到大约7.6秒的Java,4.7秒的C,这是合理的-而不是4X慢测试报告。它是点击诱饵,伪造新闻,旨在产生网站流量。 最后,最后一个音符…我用Go运行测试,时间是7.9秒。事实上,当你点击Go时,它会将它与Java进行比较,当你点击Java时,它会将它与C进行比较,对任何严肃的工程师来说应该是一个红旗。 对于一个真实世界的Java、GO和C++的比较 https://www.biorxiv.org/content/10.1101/558056v1 扰流板警报,Java表现出来的原始性能,随着组合内存使用和墙时间走出来。 |
|
|
8
0
我认为一个经常被忽视的事实是,JIT编译可以是静态编译,特别是对于(运行时)后期绑定的函数或方法。Hotspot JIT在运行时决定要内联哪些方法,它甚至可以根据当前运行的CPU的缓存大小/体系结构调整数据布局。 C/C++通常可以通过直接访问硬件来弥补(并且总体上仍然会更好)。与C相比,for-go的高级版本可能看起来有所不同,但目前缺少运行时优化系统/编译器。 我的直觉告诉我,走吧 能够 Java越快,Go就越不执行指针跟踪,并鼓励更好的数据结构局部性+更少的分配。 |
|
|
9
0
C++之所以存在,是因为它很优雅,给了您更多的抽象,在C之上,具有零运行时性能和内存蓝图成本。零 Go的存在是因为它很好,有很多原因,太多了,无法在这里分享。但是,如果运行时性能处于其他即兴创作(python)的水平,那么谢谢,但不谢谢! 现在证明这一切都是宣传:我的加拿大兄弟说:我和汤姆森曾经等待C构建45分钟,数百万次等待源代码。到现在为止,一直都还不错。但是那些行已经被写了,而坏代码就是坏代码(因为他还抱怨调试堆栈损坏有多困难,您可以这样命名)。现在我的QED问题很简单。谁来编写这数百万行Go代码,以便愉快地享受更快的构建时间????如果表现平庸,我告诉你是谁。没人!也许有些男孩从运行时性能不相关的系统中获利。但我想和你分享一个简单的秘密:快就是好,慢就是坏。 我称巨蟒为即兴创作,并将银河系中缺乏任何来自2.x对3.x的专业线索,当你导入它时,ZenZero应该说:编译器是你的朋友! 不是说我是一个编译器工程师,但是,类型安全是不可谈判的,不是我所知道的,不是在现实生活中。非程序员可以在他们的小脚本中到处享受它,但对于我们其他人来说,这是一个公理,它会一直这样,直到时间结束。我相信。 从非软件来源获得收入的公司,嗯,他们可以负担像“go”这样的宠物项目,但我向你保证,如果他们确实依赖于运行时性能(例如,像Amazon一样),他们甚至一秒钟也负担不起(同时发生了数百万笔交易)。 为什么库伯奈特是一罐蠕虫????如果Go如此干净… 为什么戈罗提内斯系统(理论上很好)如此缓慢和笨重????如果它是如此好,为什么它需要来自更传统线程的不明显的帮助器(信号量、互斥体、您命名它)。我个人认为这是神圣的,但科幻小说,就像优化Go编译器,它不会优化任何东西(主要是因为人们无法优化数学上未确定的概念,这是由最终用户/程序员在非软件公司设计语言/阅读:内部编程导致的)对于谷歌) 关于Java的事情也一样。许多人使用蓝领语言/妥协,因为他们不了解任何更好的东西。 Java和C语言有模板吗????问安德斯,非市场营销的答案不是他们没有。只有C++和Delphi这样做。他们有的是糖衣铸件。没有什么比这更重要了。 有人知道堆栈机器代码(Java,C语言)在运行时的质量差异(运行时性能)和注册代码吗????是2倍 为什么需要垃圾收集器????因为他们有太多的垃圾。一个人能在爪哇和C中泄漏记忆吗?(当然,去)——当然。 而且,尽管静态链接很好(对于内部/周日编程/作为一种爱好),但结果的可执行文件大小是侮辱性的(我相信) 而且,缺乏OOP????你开玩笑吧。就像90年代微软的孩子们,教大家如何编写真实的软件(如com、dcom),因为实现继承对你不利……是啊 我不相信谷歌有(或有能力)一个真正的语言作家在斯特劳斯集团层面,他们可能负担得起一个安德斯(顺便说一句,这不是为了销售,至少你们一起做了一个Traspiler Thingie),这不是我们所说的缺乏资金,这是缺乏共同点。SE和Real需要谷歌(以及其他许多公司,苹果将是一个完美/甚至更好的例子)来实现这一目标。另外,现实生活中的语言是谦卑的,思考C的,思考对象Pascal(不介意)和C++的。谦逊和不可言喻的天才。关于无法雇佣一个现实生活中的优化工程师(这是更不可能的,因为生来破碎的东西无法优化)。不要相信我,带上一万亿只猴子,基因改造它们,好好喂养它们,让它们快乐,给它们纸和笔,一百万年。他们会写多少首莎士比亚的十四行诗?零 现在就在这里 但是,现在与其他(愚蠢的)巨人结盟,用自己的语言来创造自己的语言是很时髦的…我很喜欢Go的很多想法,绝对非常尊重Google,但这并不能让我盲目。 晚安,大家好,现在是凌晨2:40,还在等着我那愚蠢的谷粒去做(就像他们说的…:-)哈哈 做个好人 |
|
|
10
-2
你们都在这里谈论理论。设计目标,围棋程序都设计得很好,等等(主要是胡言乱语,说起来很便宜,相信我!) 去是(不幸的)像通往地狱的路,用良好的意图铺就。我们讨论的是运行时性能,而不是编译时性能或链接时性能。为了达到编译时的性能,优化编译器根本没有进行优化,让我们忘记OOP(在那一章,很有趣,这里是LOL)和预处理器的不足。但说得够多了。让我们做一个简单的任务。按顺序生成惊人的200000个质数。好啊? 让我们看看C,C++和GO代码,如果你想要的话,我可以添加Java和C代码。你自己建造它们,运行它们,然后从那里出发。这是具体的,而不是编程期刊和/或谷歌营销的童话故事。 这是代码(C,C++,C,Java,PASCAL,GO),你也要装配吗?我想这会很丢脸,对吧?) https://drive.google.com/file/d/1SFkAY5TLUIPULm78SxJrQd3qfpHQDGsf/view?usp=sharing https://drive.google.com/file/d/1RHQQXcyFul_ekSy6iXhVsdh_CeRlCk-g/view?usp=sharing https://drive.google.com/file/d/1d6ZHLut9ANmuA79S1vkC_djtp841ORP9/view?usp=sharing https://drive.google.com/file/d/1b9lNfZWJOP6PnNuaXCTu1-szVZC4957h/view?usp=sharing https://drive.google.com/file/d/1IEaAtivk0mV6zQW15fIQeJssxBjrtFzd/view?usp=sharing 最后开始: https://drive.google.com/file/d/1f9J33LeptagXGlRuzMzH-FeJOwZcMrpE/view?usp=sharing 构建它们,然后运行它们,没什么花哨的,只是最初的200000个素数,基本计算,不是基于算法优化,只是简单的代码,比较 GO大约是一个数量级(十倍)慢于C/C++,大约是Java&C;C的5倍。当然可以使用-o3,随意使用任何你喜欢的go编译器,对于pascal,你可以使用-o4,同样的东西… 对于我们其他人来说,这还不够好,因为google男孩(比如go的作者)构建了数十亿行毫无意义的设计糟糕的C应用程序,好吧,也许go是有用的。 现在,关于使用围棋程序所产生的劣质(蠕虫的罐头),这里有一个链接,来自谷歌自己的科技教育电影,来自YouTube,他们自己的平台,对吧? 10000英里高空,营销孟买巨无霸: https://www.youtube.com/watch?v=f6kdp27TYZs&t=187s 现在,现实生活的例子,现实: https://www.youtube.com/watch?v=QDDwwePbDtw&t=1680s 看,这是一罐多么不安全的虫子。如果你不相信这个人,他们最好的人,那么我不知道你会相信谁。只是看看。在建造和测量之后,既然你应该是工程师而不是廉价的谈话记者,对吗? 丹出去了 |
|
|
11
-5
Java和C的数据和方法(函数)定义更加明确。C是静态类型的,而Java的继承模型则不那么静态。这意味着数据的处理方式在编译过程中已经有了很大的定义。 Go的数据和函数定义更加含蓄。内置函数在本质上更一般,缺少类型层次结构(如Java或C++)会带来速度劣势。 记住,google对于go语言的目标是在执行速度和编码速度之间达成一个可接受的折衷。我认为他们在早期的尝试中达到了一个很好的最佳位置,而且随着更多的工作的完成,情况只会有所改善。 如果将Go与主要优点是编码速度的动态类型语言进行比较,您将看到Go的执行速度优势。Go比Perl快8倍,比Ruby1.9和Python3快6倍。 不管怎样,最好的问题是,在编程的易用性和执行的速度上达成一个好的折衷方案?我的回答是肯定的,应该会好起来。 |
|
ginad · 如何在go-app组件中执行javascript代码 1 年前 |
|
|
Jason Fingar · 方法在另一个方法的上下文中不可访问 1 年前 |
|
|
Jess The Witch · GCP云功能中处理延迟任务的模式 1 年前 |
|
|
pmoubed · 这是使用计时器的goroutine泄漏吗? 1 年前 |