天下武功为快不破,戏说Python与Go高并发争锋!

mb600aa45a054a0 · · 939 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

菜鸟哥 菜鸟学Python 2020-07-16

图片


在这个以斗气大陆横行的世界,每一个大的势力宗门都有自己的杀手锏的功法,比如老牌的古族有C++这样的巨无霸语言,药族有C语言,几乎斗气大陆所有的操作系统都是用C语言做的,毕竟斗气都要靠吃丹药维持。而实力非常猛的魂族有Java这样的毁天灭地的语言,神秘莫测,势力范围也非常大,拥有广大的用户!

图片



而斗气大陆最近十年风头最劲的当属萧族的Python语言。2007,2010,2018,三年都是排名第一。它可以做很多事情,身兼八大家族的各种功法于一身,比如爬虫,数据分析,自动化测试,运维,数据挖掘和机器学习等等!而且在机器学习领域称王称霸,独领风骚!


然后斗气大陆无奇不有,各种新的功法层出不穷!天下武功为快不破,云计算里面的排名第一go最近风起云涌,尤其是搭上了区块链这样的庞大家族,财大气粗未来前景非常看好!据说Go语言的功法里面最强的就是高并发剑招,那么我们今天来看看Python和Go的高并发之战到底差距有多大!


图片


01.

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 还是很强的,不仅异步的代码书写非常简单,而且效率之高让人瞠目结舌,毕竟人家是编辑器级别的并发,也就从娘胎里出来就是高并发的!



02.

Python的高并发


Python里面的高并发非Asyncio莫属,这个号称是Python3里面最有野心的库,从Python3.6开始逐渐稳定推出,到了Python3.7又进行了修正,到底跟Go会又多大的差距呢,我们来看一下:

图片


Python的高并发协程需要靠后天的修行,也就是用库Asyncio来完成,原生的并不支持高并发!那么我们也高并发5000个任务,每个任务都是打印HelloWorld,看看需要多久的时间?

图片

这个结果也是让我大跌眼镜,也许可能是cpu密集性这样的操作对Python来说本来就用Asyncio没有啥优势,但是无论如何这个效率确实跟Go比起来,逊色很多啊!


难怪现在很多大公司的后端开发,比如知乎的百万级的高并发的访问,慢慢从Python转为Go语言,虽然重构的代价非常大,但是长远看在性能这一条上,Go语言的优势非常明显!




当然上面的对比并不一定非常科学和严谨,毕竟Python的强项并不是高并发而是其几乎变态的全能语言也就是说你学会Python可以干很多很多事情,而且可以跨领域的做一些事情,而Go目前只是在云计算领域占有霸主地位!


欢迎留言吱一声,说说你的看法!



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb600aa45a054a0

查看原文:天下武功为快不破,戏说Python与Go高并发争锋!

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

939 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传