�“Go将成为未来的服务器语言。” - Tobias Lütke, Shopify
在过去几年中,新的编程语言有所增加:Go或GoLang。 没有什么能让开发人员疯狂而不是新的编程语言,对吗? 所以,我开始学习4到5个月前的Go,在这里,我将告诉你为什么你也应该学习这门新语言。我要解释现阶段的计算机硬件 - 软件以及为什么我们需要像Go这样的新语言? 因为如果没有任何问题,那么我们不需要解决方案吧?
硬件限制:
摩尔定律凉凉了。
英特尔于2004年推出了第一款具有3.0GHz时钟速度的奔腾4处理器。 今天,我的Mackbook Pro 2016的时钟速度为2.9GHz。 因此,差不多十年,原始处理能力没有太大的提升。 您可以在下图中看到增加处理能力与时间的比较。
那么,对于上述问题的解决方案,制造商开始向处理器添加越来越多的内核。如今我们有四核和八核CPU可用。
我们还介绍了超线程。为处理器添加了更多缓存以提高性能。
但上述解决方案也有其自身的局限性。我们无法向处理器添加越来越多的缓存以提高性能,因为缓存具有物理限制:缓存越大,获得的速度越慢。为处理器添加更多核心也有其成本。而且,这无法无限扩展。这些多核处理器可以同时运行多个线程,从而为图像带来并发性。
因此,如果我们不能依赖硬件改进,唯一的出路就是提高性能的软件。但遗憾的是,现代编程语言效率不高。
Go有goroutines !!
如上所述,硬件制造商正在为处理器添加越来越多的内核以提高性能。 所有数据中心都在这些处理器上运行,我们预计未来几年核心数量会增加。 更重要的是,今天的应用程序使用多个微服务来维护数据库连接,消息队列和维护缓存。 因此,我们开发的软件和编程语言应该可以轻松地支持并发性,并且它们应该随着核心数量的增加而可扩展。
但是,大多数现代编程语言(如Java,Python等)都来自90年代的单线程环境。 大多数编程语言都支持多线程。 但真正的问题是并发执行,线程锁定,竞争条件和死锁。 这些事情使得很难在这些语言上创建多线程应用程序。
例如,在Java中创建新线程不是内存有效的。 由于每个线程消耗大约1MB的内存堆大小,并且最终如果你开始旋转数千个线程,它们将对堆施加巨大压力并导致由于内存不足而导致关闭。 此外,如果要在两个或多个线程之间进行通信,则非常困难。
另一方面,Go于2009年发布,当时多核处理器已经上市。 这就是为什么Go是在保持并发性的基础上构建的。 Go有goroutines而不是线程。 它们从堆中消耗了大约2KB的内存。 因此,您可以随时旋转数百万个goroutine。
其他好处是:
Goroutines具有可增长的分段堆栈。 这意味着他们只在需要时才会使用更多内存。
Goroutines的启动时间比线程快。
Goroutines带有内置的原语,可以在它们之间(通道)安全地进行通信。
Goroutines允许您在共享数据结构时避免使用互斥锁。
此外,goroutines和OS线程没有1:1映射。 单个goroutine可以在多个线程上运行。 Goroutines被多路复用到少量的OS线程中。
Go直接在底层硬件上运行。
与其他现代高级语言(如Java / Python)相比,使用C,C ++的最大好处是它们的性能。 因为C / C ++是编译的而不是解释的。
处理器理解二进制文件。 通常,在编译项目时使用Java或其他基于JVM的语言构建应用程序时,它会将人类可读代码编译为字节代码,JVM或在底层操作系统之上运行的其他虚拟机可以理解这些代码。 执行时,VM会解释这些字节码并将其转换为处理器可以理解的二进制文件。
而在另一方面,C / C ++不会在VM上执行,并且从执行周期中删除一步并提高性能。 它直接将人类可读代码编译为二进制文件。
但是,在这些语言中释放和分配变量是一个巨大的痛苦。 虽然大多数编程语言使用垃圾收集器或引用计数算法处理对象分配和删除。
Go带来了世界上最好的一面。 像C / C ++这样的低级语言,Go是编译语言。 这意味着性能几乎接近较低级别的语言。 它还使用垃圾收集来分配和删除对象。 所以,不再有malloc()和free()语句! 炫酷!!!
用Go编写的代码易于维护
我告诉你一件事。 Go没有像其他语言那样疯狂的编程语法。它的语法非常整洁。
谷歌Go的设计者在创建语言时就考虑到了这一点。由于谷歌拥有非常庞大的代码库,成千上万的开发人员正在开发相同的代码库,因此对于其他开发人员来说代码应该很容易理解,而代码的一段代码应该对代码的另一部分产生最小的副作用。这将使代码易于维护且易于修改。
以上更改使Go与其他语言有很大不同,它使Go中的编程与其他语言不同。 你可能不喜欢上面的一些观点。 但是,如果没有上述功能,您就无法对应用程序进行编码。 您所要做的就是再写2-3行。 但从积极的方面来说,它将使您的代码更清晰,并为您的代码增加更多清晰度。
Go由Google支持作为后盾
我知道这不是直接的技术优势。 但是,Go是由Google设计和支持的。 谷歌拥有世界上最大的云基础设施之一,并且规模庞大。 Go由Google设计,旨在解决支持可扩展性和有效性的问题。 这些是您在创建自己的服务器时将面临的相同问题。
更多的是Go也被一些大公司使用,如Adobe,BBC,IBM,Intel。
结论:
尽管Go与其他面向对象的语言非常不同,但它仍然是同一个野兽。 Go为您提供高性能,如C / C ++,超高效的并发处理,如Java,以及Python / Perl等代码的乐趣。
如果你没有任何学习Go的计划,我仍然会说硬件限制会给我们带来压力,软件开发人员要编写超高效的代码。 开发人员需要了解硬件并相应地优化其程序。 优化的软件可以在更便宜和更慢的硬件(如物联网设备)上运行,并且对整体用户体验的整体影响更大。
码代码不如DIY人工智能,那么Google AIY是什么?
AIY是由Google创建的DIY(自己动手)和AI(人工智能)的组合。 而这些关键字基本上就已经准确地告诉了你这些工具包的用途:自己动手做人工智能。 Google AIY目前提供两种不同的套件。
据报道,Google AIY系列开发套件已经抵港销售了,价格分别是港币706和港币392。感兴趣的开发者们,可以关注Google AIY系列开发套件的香港线上商城——引力互联GravitylinkStore。 用户可以提供自己的应用程序,甚至可以使用Google的TensorFlow机器学习软件训练他们的模型,使其更加有效。
有疑问加站长微信联系(非本文作者)