我为什么从python转向go语言

我为什么从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

一个典型计算服务耗时

POLYGON – Office Pack – Out now! Synty Studios Presents – An Epic Low Poly asset pack of zombie characters to create an apocalypse themed polygonal style game. (Includes a custom shader to allow for changing the blood color and transparency) Key Features – Zombie Characters (x50) – Bellboy Male 01, Biker Male 01, Bio Hazard Suit Male 01, Bride Female 01, Business Female 01, Businessman Male 01, Business Shirt Male 01, Cheerleader Female 01, Clown Male 01, Coat Female 01, Daughter Female 01, Diver Male 01, Fast food worker Male 01, Father Male 01, Father Male 02, Firefighter Male 01, Footballer Male 01, Gamer-girl Female 01, Gangster Male 01, Hipster Female 01, Hipster Male 01, Hobo Male 01, Hoodie Male 01, Hot Dog Suit Male 01, Jacket Female 01, Jacket Male 01, Jock Male 01, Military Male 01, Mother Female 01, Mother Male 01, Paramedic Female 01, Patient Female 01, Police Female 01, Police Male 01, Prisoner Male 01, Punk Female 01, Punk Male 01, Riot Cop Male 01, Road worker Male 01, School Boy Male 01, School Girl Female 01, Shopkeeper Female 01, Shopkeeper Male 01, Son Male 01, Summer Girl Female 01, Tourist Male 01, Underwear Female 01, Underwear Male 01. (with Alternative colors) Props – Axe 01, Bar 01, Bar 02, Cleaver 01, Knife 01, Scissors 01. Zombie gibs – Male Head 01, Female Head 01, Upper Arm 01, Lower Arm 01, Upper Leg 01, Lower Leg 01. – Heaps of awesome content included (see the layout screenshots for more details) Compatibility – Works in Unity 2017.4 and above – Support Universal Render Pipeline (URP) – URP Guide Here for Custom Shaders – Characters are setup to work with Mecanim (no animations included in this pack) Works well with our MASSIVE Apocalypse Pack POLYGON – Apocalypse Pack Follow us for updates and news Web | Facebook | Discord | Email Check out our other Assets POLYGON – 3D Asset Series Mini – 3D Asset Series Simple – 3D Asset Series
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值