在这个以斗气大陆横行的世界,每一个大的势力宗门都有自己的杀手锏的功法,比如老牌的古族有C++这样的巨无霸语言,药族有C语言,几乎斗气大陆所有的操作系统都是用C语言做的,毕竟斗气都要靠吃丹药维持。而实力非常猛的魂族有Java这样的毁天灭地的语言,神秘莫测,势力范围也非常大,拥有广大的用户!
而斗气大陆最近十年风头最劲的当属萧族的Python语言。2007,2010,2018,三年都是排名第一。它可以做很多事情,身兼八大家族的各种功法于一身,比如爬虫,数据分析,自动化测试,运维,数据挖掘和机器学习等等!而且在机器学习领域称王称霸,独领风骚!
然后斗气大陆无奇不有,各种新的功法层出不穷!天下武功为快不破,云计算里面的排名第一go最近风起云涌,尤其是搭上了区块链这样的庞大家族,财大气粗未来前景非常看好!据说Go语言的功法里面最强的就是高并发剑招,那么我们今天来看看Python和Go的高并发之战到底差距有多大!
1. Go语言的高并发
Go作为一门新兴的编程语言,最大特点就在于它是原生支持并发的。和传统基于 OS 线程和进程实现不同,Go语言的并发是基于用户态的并发,这种并发方式就变得非常轻量,能够轻松运行几万甚至是几十万的并发逻辑。
听起来非常牛逼啊,到时Go的高并发有多快呢,我们不如写一个最简单的Hello world来看看。
1).首先,我们写一个Hello world的函数,这个函数就干一件事,死命的打印Hello world from xx.
2).接着,我们开1000个线程(其实不是线程可以认为是协程,物理上对应一个线程)。大家可以看到开1000个这样的线程是相当相当牛逼的,一般我们在Python里面开50个线程就非常了不起了,这里Go语言轻松开1000个并发!
因为Go生下来就是斗宗的强者,天生自带并发特性。只需要用Go关键字就可以申明高并发了,非常简洁!比起其他的语言需要用外挂丹药修炼提升自己的斗气,要简洁不知道多少倍了!
3).最后,我们用time.sleep()让主线程只停留1毫秒,1毫米的时间让1000个人去死命打印hello world,我们看看结果哈:
看完上面的也许大家知道Go很能打,那短短的1毫秒Go到底能打印出多少个Hello world呢,比如我们设定一个5000吧,看看Go1毫秒能否打印出5000个Hello world!
我们还是打印HelloWorld, 这次直接打印5000个,然后限时在1毫秒内完成,看看Go能否5000个都打完?
Go 还是很强的,不仅异步的代码书写非常简单,而且效率之高让人瞠目结舌,毕竟人家是编辑器级别的并发,也就从娘胎里出来就是高并发的!
2. Python的高并发
Python里面的高并发非Asyncio莫属,这个号称是Python3里面最有野心的库,从Python3.6开始逐渐稳定推出,到了Python3.7又进行了修正,到底跟Go会又多大的差距呢,我们来看一下:
Python的高并发协程需要靠后天的修行,也就是用库Asyncio来完成,原生的并不支持高并发!那么我们也高并发5000个任务,每个任务都是打印HelloWorld,看看需要多久的时间?
这个结果也是让我大跌眼镜,也许可能是cpu密集性这样的操作对Python来说本来就用Asyncio没有啥优势,但是无论如何这个效率确实跟Go比起来,逊色很多啊!
难怪现在很多大公司的后端开发,比如知乎的百万级的高并发的访问,慢慢从Python转为Go语言,虽然重构的代价非常大,但是长远看在性能这一条上,Go语言的优势非常明显!
当然上面的对比并不一定非常科学和严谨,毕竟Python的强项并不是高并发而是其几乎变态的全能语言,也就是说你学会Python可以干很多很多事情,而且可以跨领域的做一些事情,而Go目前只是在云计算领域占有霸主地位!