过去几年,Python成为人工智能和数据科学领域最受欢迎的编程语言。但是随着5G时代的来临,生产环境对AI应用的性能要求越来越高,Python有点「力不从心」。天生支持并发的Golang应运而生,专家称,Go语言将统治人工智能的下一个十年。
Python花20年终获认可,但并非为AI而生
30年前,Python 首次出现。
但是Python花了20年的时间才得到公众的认可。
根据2019年Stack Overflow的调查,Python成为开发人员第二喜爱的语言。
过去的5年里,Python的成长无疑是巨大的,已经成为机器学习和数据科学开发人员的首选语言。
短时间来看,Python 的主导地位大概率不会变。但是与一些新兴的语言相比,它有一些严重的缺点,将成为生产环境部署的障碍。
Python 受欢迎的主要原因是它很容易学习。
与其他语言相比,它的语法很简单,任何人都可以在几个小时或几天内学会 Python 的基础知识。
即使在学习了c++ 或 Java 等其他语言之后,开发人员还是更愿意使用 Python。因为无论你想干啥,总有一个Python 库能满足你的需求,这些库让开发数据科学和AI类的应用变的简单高效。
但Python在大规模生产环境下的性能问题,直接影响了AI应用的开发效率。现在很多人工智能初创企业,正处于底层架构的构建阶段,检查 Python 的问题很有必要。
GIL锁住了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之父为了数据安全而设计的,那个时候计算机的主频还没有达到1G,程序全部都是运行在单核计算机上面。
某个线程想要执行,必须先拿到GIL,可以把GIL看作CPU的「通行证」,拿不到通行证就不允许进入CPU执行,Python 的多线程实际上并没有利用到多核计算的优势,它不管你有几个核,100个核也只能跑一个线程。
所以,原生的Python在性能上是有诸多限制的。人工智能和数据科学领域,对性能需求又很高,那有没有一种语言既有Python简单易用的优点,又能满足生产需求呢?
这时,Golang应运而生。
Go天生支持并发制霸云计算,还将统治AI的下一个十年
Golang(简称Go) 是一种静态和编译型语言,这意味着它的执行速度将比 Python 快好几倍。与 Python 不同,Go 不需要其他语言的帮助来提高速度。
下面是Go和 Python 之间的一个小型基准游戏对决。Go执行几乎和 c++、 Java 一样快,而且Go 编译代码比c++ 和 Java 要快得多,有些游戏中Go所需时间只有Python的百分之一。
Go 的语法也很简单,程序写完后可以直接编译成二进制文件执行。25 个关键字就能表达你能想到的所有招式,想干啥事就 Go一下。
Go 最大的特色就是天生支持并发,不需要像其他编程语言那样需要开发者自行实现或借助第三方库实现并发编程,逻辑简单通俗易懂。
Go使用 Goroutine来实现并发,Goroutine 是可以同时独立运行的函数,只占用2 kB 的内存,所以单机同时运行成千上万个Goroutine,也没问题。
上面这段程序顺序执行花费了1000多毫秒。下面我们在printTime函数前面增加一个关键字go,也就是使用Goroutine让程序并发执行,整个过程只花费了110毫秒,所以Go中实现并发非常简单。
不同于其他脚本或解释性高级编程语言,用 Go 编写的代码直接了当编译成机器码高效执行。x86、AMD64 (x86_64)、ARM;Linux、Windows、Darwin (OSX)、FreeBSD、Android (计划Go 1.4) 几乎全平台支持,真正做到了一码在手,随处复用。
人工智能正在席卷整个世界,机器学习、深度学习等模仿人类智能的应用程序层出不穷,Python可以很好地构建原型系统,帮我们验证模型是否有利用提高效率。
但现在,对高可扩展性和计算能力的需求,让Python有点捉襟见肘,而Go则在这些方面表现出了更大的潜力。与Python相比,Go的速度可以快几十倍上百倍,吞吐更多的数据,满足更高的并发需求。
根据 Hackearth 对来自76个国家的16000多名开发者的调查,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对生产环境来说更加合适。