我为什么从python转向go语言

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

我为什么从python转向go语言

 (2013-05-03 15:12:34)
标签: 

go语言

 

python

 

it

分类: software

我为什么从python转向go语言

 

chenyehao@gmail.com

2013-5-3

 

标题总是要吸引眼球,其实我至今还是python的爱好者,每个人都需要用合适的工具解决特定问题。

 

我从2004年开始使用python,在那之前,我使用perlpython语法简洁,支持面向对象,支持异常处理,丰富的第三方代码库,极大地提高了开发效率。在那以后,我一直使用python,开发企业软件,自动化工具,和小网站。

 

然后在2012年,我加入看图班(kantuban.com)这个创业公司,继续使用python开发互联网产品。我们使用tornado来开发web的前台,以及后台服务。直到我使用tornado开发的后台服务遇上了性能瓶颈。

 

这是一个缓存加上算法的服务,需要从数据库加载800万条记录到内存中,然后响应客户端请求,在内存中计算出结果返回客户端。这个服务占用2.1G内存,初始化加载数据时间(也就是启动时间)30分钟。服务的平均响应时间在10ms以下。

 

问题是,python不支持利用多核的cpu,当执行个别耗时任务时,其它的请求被阻塞(在这里非阻塞的编程模式不起作用,因为本身是密集计算,无法把计算任务推到进程之外)。如果依赖启动多个实例来提高负载,则每个实例需要占用2.1G内存,还要考虑进程间的数据同步。结论是,我们需要支持多线程多核的编程语言。如果一开始使用java,也许没有这样被动。

 

最后,我决定采用go语言。语法简洁类似python,从语言上支持多核(无需写代码创建线程,只需要全局指定并发数),静态语言更节省内存。

 

我花了一个多月,把代码从python移植到go,基本上可以做到一行python代码对应一行go代码,移植并不困难,go的代码也比较简洁。新的go服务可以同时对外提供thriftRESTful的接口。所有的努力都是值得的,我在这里对比一下性能。

 

Python 2.6

Go 1.0.3

加载时间(分钟:秒)

30:00

2:40

占用内存

2.1G

700M

一个典型计算服务耗时


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

本文来自:CSDN博客

感谢作者:legend_x

查看原文:我为什么从python转向go语言

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

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