Go语言的速度只有C语言的五分之一

Foou 发布于 2013/08/02 23:07
阅读 7K+
收藏 0
Go

有人用多种系统级语言编写了同样的地图生成工具来测试它们的性能,包括D(DMD,LDC,GDC)、Go(GCC-Go,6g)、Haskell(GHC)和Rust。>>>查看Github项目列表

注:LDC、Rust使用的是LLVM版本,Clang是GCC 3.2,GCCGo使用的是GCC4.7.3版本;而GDC使用的是GCC 4.6.4。Rust使用的是0.8-pre (9da42dc 2013-07-17 04:16:42 -0700),GHC是7.6.2版本;DMD是2.036;Go语言使用的是6g 1.1.1版本。


Go语言默认的编译器是6g,6l ,32位是8g,8l

相比C/C++,这些语言都原生支持了诸如垃圾回收这些高级特性,也因此无一能达到C/C++的运行速度。这其中表现最差的是原生Go语言编译器6g,只有Clang 22%的速度


出处:http://www.csdn.net/article/2013-07-25/2816347-benchmarking-level-generation-go-rust-haskell-and-d

加载中
0
中山野鬼
中山野鬼

引用来自“chen gege”的答案

c语言慢死了,应该采用汇编哈。。

如果是arm或者intel的cpu,上面,绝大多数情况,c的优化编译效率不会比手写的高质量汇编速度低5%,也就是说,最多速度是高质量汇编速度的95%。但面对并发指令集,不仅仅是向量指令集,下面有介绍,c语言就麻烦了。因为c语言在描述单线逻辑时非常好。并行逻辑时就很痛苦。编译器只能将并发指令集,看作多个核,在保证数据的实效性前提下,做优化。

有些人把诸如mmx ,sse等向量指令集等同dsp之类的并发指令集是不对的。这两种我都做过大量代码所以还有资格谈一下。例如存在 128位存储,可一次性做16个8位的加法计算,这个是向量指令集,意思是说,数据可以不同,且计算互补干涉,但他们都执行同一命令。alu单元的设计并没有下面介绍的并发指令系统要复杂。

并发指令,顾名思义,可以同时执行不同命令,主要是因为存在多个计算核,当然每个核的功能有差异,比如有几个加法器,只能做加减法,有几个乘法器,可以做加减法也可以做乘法,还有指针计算等。他们可以同时做不同的计算。

即便是并发指令,和多核计算仍然存在区别。因为并发指令对于跳转是统一的。程序的流程是唯一的,无非每个阶段,可以有多个不同的计算内容同时计算而已。但相对向量指令,也有很大的灵活度,同时很难使用c和任何其他传统的高级语言来高效的描述他们计算逻辑和时序。通常需要大量汇编。

至于现在的多核系统,那么可以简单理是两套独立的核,包含计算和跳转。当然他们可能共享一片(物理)存储区。优点很明显,就是两个核可以让两个线程并发工作。

不过这里我说的是线程,没说进程。

c
chen gege
鬼大,讲得忒长了,专业名词太多看不懂啊。。
1
mallon
mallon

引用来自“中山野鬼”的答案

引用来自“雨翔河”的答案

汇编语言和机器语言速度很快。
不是这个原因,而是很多高级语言,主要是为了保障基础环境的稳定性,以及降低程序员的设计负担,提供了诸如自动分配,垃圾回收,边界检测等等功能,而在实际代码在编译时都会加上很多规范的代码套路。这些套路安全是有的,效率就不要谈了。目标不一样,反正记得带垃圾回收功能的语言,就别提效率两个字。哈。
mallon
mallon
回复 @PYPlus : 翻墙是每一个ITer必备的技术
PYPlus
PYPlus
被和谐了,打不开-_-
1
mallon
mallon

引用来自“jingshishengxu”的答案

不给出测试代码,没有说服力
文章里有github链接的
0
0
寻梦
寻梦
标记一下,明天回来看评论
0
雨翔河
雨翔河
汇编语言和机器语言速度很快。
0
Risol
Risol
依然支持Go,它还年轻
0
傅小黑
傅小黑

还在慢慢发展。。c c++都三十年了,Rust和Go才三四年。。还太小

0
LimSteven
LimSteven
私以为,这种要编译的,速度跟编译器有关,没语言啥事儿
0
zoowii
zoowii
Go的一些特性还是很不错的,不过没有用它的需求,语法也没那么吸引我,所以还是算了吧
返回顶部
顶部