如何快速提升Go程序性能

快速提升Go程序性能的实用技巧,你值得了解一下。

作者

StephenWhitworth

译者

弯月,责编

屠敏

我对软件性能的话题十分感兴趣。虽然我说不清究竟是为什么。我忍受不了慢吞吞的服务和程序,而且似乎有此种感受的人不止我一个,比如还有GregLinden:

我们尝试过在A/B测试中,将页面的延迟增加毫秒,结果发现如此微小的延迟也会导致整体性能的大幅下降。——亚马逊,GregLinden

根据我的经验,糟糕的性能通常来自两个方面:

小规模时性能还不错,但用户数增长后就无法使用的操作。这类操作通常是O(N)或O(N)。当用户基数小时,它们的性能还可以接受,所以经常在将产品推向市场阶段使用。随着用户基数的增长,这类操作会出现越来越多意想不到的异常,服务也变得不稳定。出于不同人之手的大量小型优化——即“千疮百孔”的复杂代码。我的职业生涯主要做两项工作,第一是用Python写数据科学脚本,第二是用Go写服务。关于后者我有更多的优化经验。Go通常不会是服务的瓶颈,因为这些程序通常需要访问数据库,因此更偏重于IO。相反,批处理的机器学习管线(前者)的程序通常偏重于CPU。如果Go语言使用了过多CPU,而且造成了负面影响,那么你可以采用几种策略来应对。

我在这篇文章中列出了一些不需要太多精力就能显著提高性能的技巧,并不包含那些需要太多精力或需要大幅度修改程序结构的技巧。

开始优化之前

开始优化之前,首先应该花些时间找出一个合适的基准线,以便稍后比较。如果没有基准,那就等于摸着石头过河,根本不知道自己的优化有没有效果。首先要编写性能测试程序,然后生成能用于pprof的profile文件。最好可以编写Go的性能测试脚本(


转载请注明:http://www.aierlanlan.com/cyrz/2245.html