Google GO 到底能走多快?

Google GO 到底能走多快?

原文:https://medium.com/hackernoon/how-fast-can-google-go-really-go-790be9fd515a

70 年代,我十几岁的时候就开始编程了,一台是老式的 TRS 80,配有盒式驱动器和 BASIC 语言,另一台是 IBM 大型机,配有 RPGII 和 COBOL。TRS 80 正在尝试基于文本的游戏,但它们很有趣。在现实世界中,我们使用计算机来批量处理数据,语言也为此进行了优化。RPG(不要与角色扮演游戏混淆)超级强大,但超级奇怪,因为它完全优化了 80 列穿孔卡,尽可能不费力,而 COBOL 和 BASIC 是免费格式。幸运的是,现在 RPG 和 BASIC 的安装数量相对较少,但 COBOL 呢,它能被取代吗?

据报道,COBOL 仍然是世界上 70%的已安装软件,并处理比谷歌和 YouTube 搜索查询多 200 倍的事务。一个大问题是没有人再学习 COBOL 了,作为一种语言,COBOL 不再像教授的那样,尽管它非常容易学习。有了这个序言,你可能想知道我要说什么。我一直认为 Python 会是一个很有价值的继任者,我也相信这一点,但在过去几年里,我一直在使用谷歌相对较新的 Go 语言做一些小项目。我真的不想做另一种语言的比较,而是对 COBOL 擅长的东西——原始批处理——进行性能比较。

我下载了一个地理数据文件,它是一个 CSV 文件中的一系列数字字符串,作为测试用例。该文件大约 190MB,包含 2,173,762 条记录。这似乎是一个很好的测试案例,可以给我们一些及时的结果。

我想做的另一件事是使用一台旧的、功能不足的计算机,所以我们选择了一台只有 640MB 内存、运行 Windows XP 的计算机。

对于 COBOL 编译器,我使用了我自己的产品 KOBOL,这是几年前我们测试中最快的 COBOL。COBOL 语言中最昂贵的动词之一是“UNSTRING”命令,它将基于分隔符将字符串解析为一个或多个变量。除了需要提前定义所有变量之外,这非常方便,所以您需要知道您正在处理的数据。这在 Go 中没有限制,但我想用尽可能相似的方式定义这两个应用。

为了使测试简单,我们要做的就是读取文件,并在逗号分隔符上将它解析成所需数量的变量。由于 RAM 容量低而记录数量大,我认为结果应该非常相似,因为我们将从磁盘中进行大量读取。不过,我对结果感到相当惊讶。我们在每次运行之间进行了重新启动,以确保系统每次都处于相似的状态,并且我们多次运行测试以确认结果,总分数将在此处得到反映。

更有趣的是,Go 语言有多种读取文件的方式。我保持它的简单,并限制自己阅读和阅读所有。功能上的区别是 READALL 会先将整个文件吸入内存,然后在那里对其执行操作。这些是数字,然后我们会回顾结果:

COBOL       2 minutes 28.27 seconds
Go READ     40.55 seconds
Go READALL  6 minutes 17.5 seconds

对于 COBOL 应用程序,我甚至测试了删除记录上的所有处理,只留下读取,结果只改变了几秒钟,这真让我吃惊。显然我的 KOBOL 编译器比我想象的更有效。然后,我在一台 64 位、4gb 内存的 Windows 7 机器上运行 GO 程序,看看它们的表现如何。我没有用 KOBOL 这样做,因为我们没有 64 位版本。

Go READ     23.10 seconds
Go READALL  23.61 seconds

看看 READALL 区别。它仍然没有 READ 快,但 RAM 和架构之间的变化产生了巨大的差异。虽然 READ 的性能提升不到 2 倍,但 READALL 的性能提升接近 9 倍。不过,这告诉我,READALL 对于任何严肃的批处理的性能都是一个非常糟糕的想法,因为结果会在系统之间发生巨大的变化。对于小文件来说,这可能是个好主意,但是对于批处理,我会远离它。

我很喜欢 COBOL,因为它做了它应该做的事情,但是 Go 是现代的、干净的、可移植的、编译的、快速的,并且与现在教授的非常相似。Go 比 Java 领先了好几年,而 Java 根本不适合作为 COBOL 的替代品。我使用 Go 的时间越长,我就越喜欢它作为几乎所有其他语言的替代品,从网络到处理数百万医疗记录的服务器。

点击此处查看代码的精彩之处!

所以要回答题目中的问题,围棋真的可以走得很快。比目前运行世界计算机的 COBOL 语言还要快。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除