Python并非为AI而生,Golang将统治人工智能的下一个十年?


Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
【新智元导读】过去几年 , Python成为人工智能和数据科学领域最受欢迎的编程语言 。 但是随着5G时代的来临 , 生产环境对AI应用的性能要求越来越高 , Python有点「力不从心」 。 天生支持并发的Golang应运而生 , 专家称 , Go语言将统治人工智能的下一个十年 。
30年前 , Python 首次出现 。
但是Python花了20年的时间才得到公众的认可 。
根据2019年Stack Overflow的调查 , Python成为开发人员第二喜爱的语言 。

Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
过去的5年里 , Python的成长无疑是巨大的 , 已经成为机器学习和数据科学开发人员的首选语言 。
短时间来看 , 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++ 编写的 , 它们有助于显著提高执行速度 。
Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
这就有点像拄着拐走路 , 一直需要外界的帮助 。
随着5G时代的来临 , 多任务并行处理和实时性的需求猛增 , Python是可以构建小而美的应用 , 但是大规模、高吞吐的场景下 , 表现不尽如人意 。 虽然有很多方法 , 来提高Python的并行计算的能力 , 但都是曲线实现的 , 并没有实现真正意义的并行 。
因为Python中存在一个GIL锁 , 每次只允许程序执行一个线程 。
【Python并非为AI而生,Golang将统治人工智能的下一个十年?】GIL的全称是Global Interpreter Lock(全局解释器锁) , Python之父为了数据安全而设计的 , 那个时候计算机的主频还没有达到1G , 程序全部都是运行在单核计算机上面 。
Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
某个线程想要执行 , 必须先拿到GIL , 可以把GIL看作CPU的「通行证」 , 拿不到通行证就不允许进入CPU执行 , Python 的多线程实际上并没有利用到多核计算的优势 , 它不管你有几个核 , 100个核也只能跑一个线程 。
所以 , 原生的Python在性能上是有诸多限制的 。 人工智能和数据科学领域 , 对性能需求又很高 , 那有没有一种语言既有Python简单易用的优点 , 又能满足生产需求呢?
这时 , Golang应运而生 。
Golang(简称Go) 是一种静态和编译型语言 , 这意味着它的执行速度将比 Python 快好几倍 。 与 Python 不同 , Go 不需要其他语言的帮助来提高速度 。
下面是Go和 Python 之间的一个小型基准游戏对决 。 Go执行几乎和 c++、 Java 一样快 , 而且Go 编译代码比c++ 和 Java 要快得多 , 有些游戏中Go所需时间只有Python的百分之一 。

Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
Go 的语法也很简单 , 程序写完后可以直接编译成二进制文件执行 。 25 个关键字就能表达你能想到的所有招式 , 想干啥事就 Go一下 。

Python并非为AI而生,Golang将统治人工智能的下一个十年?文章插图
Go 最大的特色就是天生支持并发 , 不需要像其他编程语言那样需要开发者自行实现或借助第三方库实现并发编程 , 逻辑简单通俗易懂 。
Go使用 Goroutine来实现并发 , Goroutine 是可以同时独立运行的函数 , 只占用2 kB 的内存 , 所以单机同时运行成千上万个Goroutine , 也没问题 。