我为什么从python转向go语言

本文分享了作者从使用Python转向Go语言的经历,特别是在遇到Python无法有效利用多核CPU及内存消耗大的问题后,通过改用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

一个典型计算服务耗时

熟悉 Python 的开发者转向学习 Go 语言可从以下方面入手: ### 了解 Go 语言基础特性 Go 语言是简洁高效的后起之秀,具有高性能、并发特性和适应性等特点,与 Python 不同,它是编译型语言,不需要像 Python 那样使用虚拟环境,采用全局安装,并在项目层级管理依赖[^1][^2][^5]。 ### 学习 Go 语言语法 对比 PythonGo 的语法差异,例如变量声明、函数定义、控制结构等。Python 使用缩进来表示代码块,而 Go 使用花括号。以下是 PythonGo 定义函数的示例: ```python # Python 函数定义 def add(a, b): return a + b ``` ```go // Go 函数定义 package main func add(a int, b int) int { return a + b } ``` ### 实践项目 通过实际项目来巩固所学知识。可以从简单的命令行工具开始,逐渐过渡到 Web 应用等复杂项目。创建 Go 项目可按如下步骤操作: ```bash # 创建项目目录 mkdir hello-go cd hello-go # 初始化 Go 模块 go mod init hello ``` ### 深入学习并发编程 Go 语言的并发特性是其一大优势,与 Python 相比,Go 提供了更简洁的并发编程模型,使用 goroutine 和 channel 来实现并发。以下是一个简单的 Go 并发示例: ```go package main import ( "fmt" ) func printNumbers() { for i := 1; i <= 5; i++ { fmt.Println(i) } } func main() { go printNumbers() fmt.Println("Main function") // 等待一段时间,让 goroutine 有机会执行 fmt.Scanln() } ``` ### 研究 Go 标准库和常用第三方库 Go 语言拥有丰富的标准库,同时也有许多优秀的第三方库。熟悉这些库可以提高开发效率,就像 Python 的丰富库生态一样。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值