“Go将成为未来的服务器语言。” — TobiasLütke,Shopify
在过去的几年中,出现了新的编程语言:Go或GoLang。没有什么比新的编程语言更使开发人员疯狂了,对吗?因此,我在4到5个月前开始学习Go语言,在这里我将告诉您为什么还要学习这种新语言。
我不会教你如何在本文中写“ Hello World !!”。在线上还有很多其他文章。我将解释计算机硬件软件的当前阶段,以及为什么我们需要像Go这样的新语言?因为如果没有问题,那么我们就不需要解决方案,对吗?
摩尔定律失败了。 英特尔早在2004年就推出了第一款时钟频率为3.0GHz的奔腾4处理器。今天,我的Mackbook Pro的时钟速度为2.9GHz。因此,近十年来,原始处理能力并没有获得太多收益。您可以在下表中看到随时间增加处理能力的比较。
从上面的图表中可以看到,单线程性能和处理器频率在近十年中一直保持稳定。如果您认为添加更多晶体管是解决方案,那么您错了。 这是因为在较小的规模上,一些量子特性开始出现(例如隧道效应),并且实际上放置更多晶体管的成本更高(为什么?),每美元可添加的晶体管数量开始下降。 因此,为了解决上述问题,
但是上述解决方案也有其 自身的局限性。由于缓存具有物理限制,因此无法向处理器添加越来越多的缓存来提高性能:缓存越大,缓存越慢。向处理器添加更多内核也有其成本。同样,这不能无限期地扩展。这些多核处理器可以同时运行多个线程,这带来了并发性。我们稍后再讨论。
因此,如果我们不能依靠硬件改进,唯一的方法就是使用更高效的软件来提高性能。但是可悲的是,现代编程语言效率不高。
“现代处理器就像是硝基燃料的有趣汽车,它们在四分之一英里处表现出色。不幸的是现代编程语言都像蒙特卡洛,他们充满曲折。” - 戴维·安加
如上所述,硬件制造商正在为处理器添加越来越多的内核,以提高性能。所有数据中心都在这些处理器上运行,我们应该期望在未来几年内内核数量会增加。更重要的是,当今的应用程序使用多个微服务来维护数据库连接,消息队列和维护缓存。因此,我们开发的软件和编程语言应轻松支持并发性,并且应随着内核数量的增加而扩展。
**但是,大多数现代编程语言(如Java,Python等)都来自90年代的单线程环境。**这些编程语言大多数都支持多线程。但是真正的问题在于并发执行,线程锁定,竞争条件和死锁。 这些事情使得在这些语言上创建多线程应用程序变得困难。
例如,在Java中创建新线程效率不高。由于每个线程消耗大约1MB的内存堆大小,最终如果您开始旋转数千个线程,它们将对堆施加巨大压力,并由于内存不足而导致关闭。另外,如果您想在两个或多个线程之间进行通信,则非常困难。
另一方面,Go于2009年发布,当时多核处理器已经可用。这就是为什么走的是与保持并发考虑建造。Go具有goroutines而不是线程。它们从堆中消耗了将近2KB的内存。所以,你可以随时旋转百万够程的。
`Goroutines如何工作?Reffrance:http ://golangtutorials.blogspot.in/2011/06/goroutines.html`
其他好处是:
您可以看到Rob Pike出色的通话并发性并不是并行机制,因此无法对此有更深入的了解。
以上所有这些,使Go在处理Java,C和C ++之类的并发性方面非常强大,同时保持了并发执行代码的平稳性和Erlang之类的美丽。
`Go兼顾了两个世界。易于编写并发并有效管理并发`
与其他现代高级语言(例如Java / Python)相比,使用C,C ++的最大好处是它们的性能。因为C / C ++是经过编译而不进行解释的。
处理器了解二进制文件。通常,当您在编译项目时使用Java或其他基于JVM的语言构建应用程序时,它会将人类可读的代码编译为字节代码,而JVM或在底层OS之上运行的其他虚拟机可以理解这些代码。在执行时,VM解释这些字节码并将其转换为处理器可以理解的二进制文件。
`基于VM的语言的执行步骤`
另一方面,C / C ++无法在VM上执行,这从执行周期中删除了一个步骤,从而提高了性能。它直接将人类可读的代码编译为二进制文件。
但是,释放和分配这些语言中的变量是一个巨大的痛苦。大多数编程语言都使用垃圾收集器或引用计数算法来处理对象分配和删除。
Go带来了两全其美的优势。像C / C ++这样的低级语言一样,Go是编译语言。这意味着性能几乎接近低级语言。它还使用垃圾回收来分配和删除对象。因此,不再需要malloc()和free()语句!!!凉!!!
我告诉你一件事。Go没有像其他语言一样疯狂的编程语法。它具有非常简洁的语法。
Google Go语言的设计师在创建语言时就牢记这一点。由于google具有庞大的代码库,并且成千上万的开发人员正在同一个代码库上工作,因此对于其他开发人员而言,代码应易于理解,并且一段代码对另一段代码的影响应最小。这将使代码易于维护和修改。
Go故意遗漏了现代OOP语言的许多功能。
上述变化使Go与其他语言完全不同,并且使Go编程也与其他语言不同。您可能不喜欢上面的几点。但是,这不像没有上述功能就无法编写应用程序。您所要做的就是再写2–3行。但从积极的方面来说,它将使您的代码更整洁,并为您的代码增加更多清晰度。
`代码可读性与效率`
上图显示Go几乎与C / C ++一样高效,同时使代码语法像Ruby,Python和其他语言一样简单。对于人类和加工者来说,这是双赢的局面!!!
与Swift等其他新语言不同,Go的语法非常稳定。自2012年首次公开发布1.0版以来,它一直保持不变。这使其向后兼容。
———————————————— 版权声明:本文为博主「Keval Patel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://medium.com/@kevalpatel2106/why-should-you-learn-go-f607681fad65