APP下载

Golang或将统治人工智能下一个10年

2020-04-01王雄

计算机与网络 2020年20期
关键词:编程语言开发人员线程

王雄

过去几年,Python成为人工智能和数据科学领域最受欢迎的编程语言。但是随着5G时代的来临,生产环境对AI应用的性能要求越来越高,Python有点“力不从心”。天生支持并发的Golang应运而生,有专家称,Go语言将统治人工智能的下一个10年。

30年前,Python首次出现,但是Python花了20年的时间才得到公众的认可,根据2019年Stack Overflow的调查,Python成为开发人员第二喜爱的语言。过去的5年里,Python的成长无疑是巨大的,已经成为机器学习和数据科学开发人员的首选语言。

短时间来看,Python的主导地位大概率不会变,但是与一些新兴的语言相比,它有严重的缺点,将成为生产环境部署的障碍。

与其他语言相比,它的语法很简单,任何人都可以在几个小时或几天内学会Python的基础知识。即使在学习了C++或Java等其他语言之后,开发人员还是更愿意使用Python。因为无论想做什么,总有一个Python库能满足你的需求,这些库让开发数据科学和AI类的应用变的简单高效。

但Python在大规模生产环境下的性能问题,直接影响了AI应用的开发效率。现在很多人工智能初创企业,正处于底层架构的构建阶段,检查Python的问题很有必要。

Python是一个解释性语言,这导致它执行起来比较慢,与其他编程语言如C++和Go相比,Python的执行速度就像乌龟一样,所以很多AI模型虽然是用Python开发的原型,部署时还得转成其他语言。

Python是一种动态类型语言,变量的数据类型在运行时自动判断,也使得执行速度变慢。为了克服Python的速度,很多Python库选择更快的语言来重写,例如TensorFlow、Numpy和Pandas部分是用C或C++编写的,它们有助于显著提高执行速度。这就有点像拄着拐走路,一直需要外界的帮助。

随着5G时代的来临,多任务并行处理和实时性的需求猛增,Python是可以构建小而美的应用,但是大规模、高吞吐的场景下,表现不尽如人意。虽然有很多方法来提高Python的并行计算的能力,但都是“曲线救国”,并没有实现真正意义的并行,因为Python中存在一个GIL锁,每次只允许程序执行一个线程。

GIL的全称是Global Interpreter Lock,意思是全局解释器锁,是Python之父为了数据安全而设计的,那时计算机主频还没有达到1 GByte,程序全部都是运行在单核计算机上面。

某个线程想要执行,必须先拿到GIL,可以把GIL看作是CPU的“通行证”,拿不到通行证就不允许进入CPU执行,Python的多线程实际上并没有利用到多核计算的优势,它不管你有几个核,100个核也只能一次跑一个线程。

所以,原生的Python在性能上是有诸多限制的。人工智能和数据科学领域,对性能需求又很高,那有没有一种语言既有Python简单易用的优点,又能满足生产需求呢?

这时,Golang应运而生。

Golang(Go)是一种静态和编译型语言,这意味着它的执行速度将比Python快好几倍。

与Python不同,Go不需要其他语言的帮助来提高速度。Go执行几乎和C++,Java一样快,而且Go编译代码比C++和Java也快得多,有些游戏中Go所需时间只有Python的百分之一。

Go的语法也很简单,程序写完后可以直接编译成二进制文件执行,25个关键字就能表达你能想到的所有招式,想干啥事就Go一下。

Go最大的特色就是天生支持并发,不需要像其他编程语言那样需要开发者自行实现,或借助第三方库实现,逻辑简单通俗易懂。

Go使用Goroutine来实现并发,Goroutine是可以同时独立运行的函数,只占用2 KByte的内存,所以单机同时运行成千上万个Goroutine,也没问题。

不同于其他脚本或解释性高级编程语言,Go编写的代码可直接了当编译成机器码高效执行。x86,AMD64(x86_64),ARM,Linux,Windows,Darwin(OSX),FreeBSD,Android几乎全平台支持,真正做到了一码在手,随处复用。

人工智能正在席卷整个世界,机器学习、深度学习等模仿人类智能的应用程序层出不穷,Python可以很好地构建原型系统,帮我们验证模型是否有利用提高效率。

但现在,对高可扩展性和计算能力的需求,让Python有点捉襟见肘,而Go则在这些方面表现出了更大的潜力。与Python相比,Go的速度可以快几十倍、上百倍,吞吐更多的数据,满足更高的并发需求。

根据Hackearth对来自76个国家的16 000多名开发者的调查,Go成为2020年最受欢迎的编程语言,有经验的开发人员中有近三成想学习Go,学生中这一比例也达到了29 %。知乎在几年前也將推荐系统从Python切换到了Go。

Go首席布道师许式伟2015年时曾说,Go语言将在两年内制霸云计算领域,而且Go将统治下一个10年。

Docker、Kubernetes等项目的成功,让Go在集群计算和云计算领域拔得了头筹,但是Go的脚步并没有停下。利用机器学习、深度学习来预测和推理,最终目的还是为了生产服务。Go对生产环境的支持要远远好于Python,比如Go语言开发的Cortex,可以将Python开发的AI模型快速、稳定地部署至生产环境。

Go和Python两大社区的开发人员也争论过哪种语言更好,似乎,谁也没完全说服谁。但越来越多的公司采用Go搭建基础架构,至少证明对生产环境来说,Go更加合适。

猜你喜欢

编程语言开发人员线程
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
计算机软件JAVA编程优势及其应用
基于计算机应用软件开发的Java编程语言研究
Semtech发布LoRa Basics 以加速物联网应用
Java多线程产生安全问题及对策分析
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
后悔了?教你隐藏开发人员选项
三星SMI扩展Java论坛 开发人员可用母语
Java的多线程技术探讨