go程序性能优化
性能优化总结:
1 尽量避免频繁创建对象,即减少&{},new,make的使用
2 数组可当切片用,当需要使用切片时,可考虑能使用数组来减少切片的创建
3 当某类临时对象被多个协频繁程使用时,可用sync.pool做缓存
4 当某类临时对象被少量协程频繁使用时,可预先创建对象数组来减少零碎对象数量
5 单通道多协程的场景,可尝试多通道均分多协程实现(通道内部使用锁互斥,减少单条通道的协程数量可提高并发效率)
6 当协程数量达到万级,应控制协程数量(协程过多,对gc影响特大 go1.4)
7 由于调度影响,协程可预先创建的尽量预先创建,避免需要时创建,特别是响应延迟要求较低的逻辑
性能优化方法:
=======================CPU性能分析方法=========================
方式一:
对象:非web程序, 在程序中引入runtime/pprof包,并添加如下代码:
filename := "cpu_profile" // 最好是在放在主函数中 test.pprof CPU分析文件
f, err := os.Create(filename)
if err != nil {
fmt.Println(err)
return
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
defer f.Close()
使用:终端执行 go tool pprof program_name cpu_profile
方式二:
对象:web程序,引入net/http/pprof包, 且web的路由处理为默认处理,若非默认路由,则为其添加如下类似路由处理:
func init() {
http.Handle("/debug/pprof/", http.HandlerFunc(Index))
http.Handle("/debug/pprof/cmdline", http.HandlerFunc(Cmdline))
http.Handle("/debug/pprof/profile", http.HandlerFunc(Profile))
http.Handle("/debug/pprof/symbol", http.HandlerFunc(Symbol))
}
ps:此段代码为net/http/pprof内代码,为自定义路由处理添加时将函数转换成pprof包的调用即可,如:Index ==> pprof.Index
使用:浏览器访问上述路径即可,也可用 go tool pprof program_name http:xxx:xx/debug/pprof/profile进入命令行交互模式使用
方式三:
对象:应用程序或Test案例(可执行结束的), 进入工作目录使用如下命令:
Go test -cpuprofile filename net/http // filename 为自定义文件名,会生成此文件和http.test文件
使用: go tool pprof http.test filename
================================GC性能分析方法===========================
设置环境变量:export GODEBUG=gctrace=1 // 具体数据含义百度~~
go程序性能优化的更多相关文章
- C++ 应用程序性能优化
C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...
- Java程序性能优化技巧
Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...
- 《Java程序性能优化:让你的Java程序更快、更稳定》
Java程序性能优化:让你的Java程序更快.更稳定, 卓越网更便宜,不错的书吧
- [JAVA] java程序性能优化
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...
- iOS程序性能优化
iOS程序性能优化 一.初级 使用ARC进行内存管理 在iOS5发布的ARC,它解决了最常见的内存泄露问题.但是值得注意的是,ARC并不能避免所有的内存泄露.使用ARC之后,工程中可能还会有内存泄露, ...
- [python]用profile协助程序性能优化
转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...
- iOS 程序性能优化
前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写 ...
- 微信小程序性能优化技巧
摘要: 如果小程序不够快,还要它干嘛? 原文:微信小程序性能优化方案--让你的小程序如此丝滑 作者:杜俊成要好好学习 Fundebug经授权转载,版权归原作者所有. 微信小程序如果想要优化性能,有关键 ...
- [转]C#程序性能优化
C#程序性能优化 1.显式注册的EvenHandler要显式注销以避免内存泄漏 将一个成员方法注册到某个对象的事件会造成后者持有前者的引用.在事件注销之前,前者不会被垃圾回收. private v ...
- [深入浅出Cocoa]iOS程序性能优化
本文转载至 http://blog.csdn.net/kesalin/article/details/8762032 [深入浅出Cocoa]iOS程序性能优化 罗朝辉 (http://blog.csd ...
随机推荐
- 浅谈数据结构-Boyer-Moore算法
上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法.1977年,德克萨斯大学的Robert S. Boyer教授和J Strothe ...
- winform 猜猜看 分类: WinForm 2014-08-21 14:12 267人阅读 评论(0) 收藏
说明: 1>窗体应用程序. 2>一个窗体(Form1),一个按钮(btnStart),一个文本(labTime) 3>截图: 4>代码如下: using System; usi ...
- 【Android - 框架】之刷新加载框架Ultra-Pull-To-Refresh的使用
Ultra-Pull-To-Refresh框架是用来嵌套其他布局,实现下拉刷新和上拉加载的框架.它其中可以嵌套任何控件,ListView.GridView.ScrollView.RecyclerVie ...
- 关于MS office 180天后再次激活遇到的问题解决方法
遇到的问题: 再次点击miniKMS 激活软件激活失败 : 我也不知道这是为什么?后来我在同一目录重装了一次,点击的还是我以前的那个KSM激活软件,出现的错误还是一样的.于是我想可能是这个激活软件的 ...
- UISegmentedControl UISlider
self.view.backgroundColor = [UIColor whiteColor]; //UISegmentedControl 是iOS中的分段控件,事实上是多个button的组合视图, ...
- clock_gettime测代码运行时间
//函数原型: // long clock_gettime (clockid_t which_clock, struct timespec *tp); //参数列表: // CLOCK_REALTIM ...
- redundant 行记录格式
CREATE TABLE `mytest2` ( `t1` varchar() DEFAULT NULL, `t2` varchar() DEFAULT NULL, `t3` ) DEFAULT NU ...
- Java语言基础(五)
Java语言基础(五) 一.浮点数 浮点数就是小数,其标准是IEEE 754,用指数和尾数表示 例如30000=3*10000=3*10^4 其中4是指数,3是尾数 Java中,浮点数有float ...
- Tomcat源码分析--转
一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...
- Windows 8和CentOS 6.4(64)双系统硬盘安装教程
最近在笔记本上升级原来的系统Win7到Win8,同时又安装了CentOS 6.4(64)系统,实现双系统共存.着实折腾了一番,主要是CentOS6.4(64)的两个iso文件加起来5G多(其实只用第一 ...