高质量编程与性能调优实践 性能分析工具pprof

news2024/9/26 1:18:08

01 高质量编程

1.1 简介

什么是高质量

——编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码

• 各种边界条件是否考虑完备

• 异常情况处理,稳定性保证

• 易读易维护

编程原则

实际应用场景千变万化,各种语言的特性和语法各不相同

但是高质量编程遵循的原则是相通的

简单性

•消除“多余的复杂性”,以简单清晰的逻辑编写代码

•不理解的代码无法修复改进可读性

可读性

•代码是写给人看的,而不是机器

生产力

•编写可维护代码的第一步是确保代码可读生产力

•团队整体工作效率非常重要

--Go语言开发者DaveCheney

1.2 编码规范

如何编写 高质量 的Go代码

•代码格式•注释•命名规范•控制流程•错误和异常处理

1.2.1 编码规范—代码格式

1.2.2 编码规范—注释

Google的注释 规范

注释应该做的

•注释应该解释代码作用

•注释应该解释代码如何做的

•注释应该解释代码实现的原因

•注释应该解释代码什么情况会出错

Good code has lots of comments,bad code requires lots of comments

好的代码有很多注释,坏代码需要很多注释

——DaveThomasandAndrewHunt

公共符号始终要注释

1.2.3 命名规范

变量variable

•简洁胜于冗长

•缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写

•例如使用ServeHTTP而不是ServeHttp

•使用XMLHTTPRequest或者xmlHTTPRequest

•变量距离其被使用的地方越远,则需要携带越多的上下文信息

•全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义

函数命名 function

包命名package

•只由小写字母组成。不包含大写字母和下划线等字符

简短并包含一定的上下文信息。例如schema、task等

不要与标准库同名。例如不要使用sync或者strings

以下规则尽量满足,以标准库包名为例

不使用常用变量名作为包名。例如使用bufio而不是buf

•使用单数而不是复数。例如使用encoding而不是encodings

谨慎地使用缩写。例如使用fmt在不破坏上下文的情况下比format更加简短

Good naming is like a good joke.If you have to explain it , it’s not funny

好的命名就像一个好笑话。如果你必须解释它,那就不好笑了 —DaveCheney

1.2.4 控制流程

下左 是上面代码的 规范格式;下右是 Go仓库中一段标准的处理流程

小结

•线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支

•正常流程代码沿着屏幕向下移动

•提升代码可维护性和可读性

•故障问题大多出现在复杂的条件语句和循环语句

1.2.5 错误和异常处理

复杂错误

错误判定

panic

规范 例题

性能优化指南

1.3 性能优化建议

•性能优化的前提是满足正确可靠、简洁清晰等质量因素

•性能优化是综合评估,有时候时间效率和空间效率可能对立

•针对Go语言特性,介绍Go相关的性能优化建议

1.3 性能优化建议—Benchmark

b.N代表 实际测试了多少次

1.3.2 性能优化—Slice

预分配:初始化容量 ;能减少 底层 内存分配次数,减少执行时间

Slience底层:

容量不足时,底层数组会先扩容然后 再把b放进去

新切片仍然复用 原来切片 导致的陷阱:

1.3.3 性能优化—Map

1.3.4 性能优化—字符串处理

性能差异:

1.3.5 空间性能优化—空结构体

1.3.6 性能优化—atomic

atomic包 维护原子变量进行操作 性能优于 MutexAddOne()加锁操作;

1.3 建议小结

•避免常见的性能陷阱可以保证大部分程序的性能

•普通应用代码,不要一味地追求程序的性能

越高级的性能优化手段越容易出现问题

•在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能

02性能调优实战

2.1简介

过早优化:功能会迭代或者用户数量没到性能瓶颈,过早就没用;

2.2 性能分析工具 pprof

•希望知道应用在什么地方耗费了多少CPU、Memory

•pprof是用于可视化和分析性能分析数据的工具

2.2.1 pprof 功能简介

2.2.2 pprof 实战排查

GitHub - wolfogre/go-pprof-practice: go pprof practice.

浏览器查看指标

http://localhost:6060/debug/pprof/

CPU 采集10s样本数据

web自动生成 调用关系图(每个节点 调用 消耗的数据和 调用链);

Heap—堆内存

可以把这个占用了1G的方法注释掉

注释之后 ;内存占用 降低

goroutine—协程

mutex—锁

block—阻塞

小结

2.2.3 pprof采样过程&原理

CPU

Heap—堆内存

Goroutine—协程&ThreadCreate—线程创建

Block& Mutex

2.3 性能调优案例

2.3.1 业务服务优化

>流程

•建立服务性能评估手段

•分析性能数据,定位性能瓶颈

•重点优化项改造

•优化效果验证

建立服务性能评估手段

分析性能数据,定位性能瓶颈

重点优化项改造

优化效果验证

2.3.2 基础库优化

2.3.3 Go语言本身优化

2.4 总结

非常感谢您阅读到这里,创作不易!如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 收藏 💕评论💬感谢支持!!!

听说 三连能够给人 带来好运!更有可能年入百w,进入大厂,上岸

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1267. 统计参与通信的服务器

这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

浪涌保护器防雷应用的行业解决方案

浪涌保护器SPD是一种用于防止电力系统或电子设备受到雷击或其他暂态过电压的损坏的装置。它可以有效地限制或分流过电压,保护被保护设备的安全和正常运行。浪涌保护器在各个行业领域都有广泛的应用,地凯科技将介绍浪涌保护器的主要应用领域,以…

threejs纹理加载(二)

通过threejs提供的加载器我们去加载一些贴图作为几何体的纹理&#xff0c;非常方便。我们以本地一张图片作为例子来实现这个效果&#xff1a; <template><div></div> </template> <script setup> import { ref } from "vue";import …

C++ 编译报错“jump to label”

C 编译报错“jump to label” 分析解决方法如何在Eclipse中添加编译选项 分析 void func() {int a 0;a;goto label; label:int b 0;return; }这样的代码是有问题的&#xff0c;因为C编译规则中&#xff0c;不允许goto后面还有新的变量声明。 解决方法 将所有变量声明放到第…

LTD240次升级 | 栏目介绍可在官微中心管理 • 移动分享页可显示产品图文参数

1、新增一种自定义内容数据类型&#xff0c;可用于服务特色等版块展示 2、Android版App优化首页内容排序 3、新增一款导航模块和一款轮播模块 4、移动分享页支持产品图文参数 5、已知问题修复与优化 01 官微中心 1) 新增自定义内容类型数据管理功能 本次升级中&#xff0c;新…

卡尔曼滤波学习笔记

Kalman Filter Ⅰ、直观理解1、描述2、例子 Ⅱ、适用范围1、线性系统2、噪声服从高斯分布 Ⅲ、相关公式1、原始公式2、预测公式3、更新公式4、初值赋予5、总结 Ⅳ、应用例子Ⅴ、代码实现Ⅵ、公式理解1、协方差矩阵的理解1.1 协方差1.2 协方差矩阵1.3、相关数学公式 2、状态方程…

实例043 如何实现Office助手

实例说明 用过Office的人都知道&#xff0c;Office助手是一个非常漂亮的小工具&#xff0c;有了它&#xff0c;即使对Office不太熟悉的用户也可以操作自如。本实例使用C#制作了一个类似Office助手的程序&#xff0c;实例效果如图1.44所示。 技术要点 要实现Office助手效果&a…

2023年Java毕业设计题目推荐,怎样选题?500道毕业设计题目推荐

大家好&#xff0c;我是程序员徐师兄&#xff0c;最近有很多同学咨询&#xff0c;说毕业设计了&#xff0c;不知道选怎么题目好&#xff0c;有哪些是想需要注意的。 今天&#xff0c;我整理了一些Java毕业设计的题目,可以参考一下&#xff0c;希望对大家有所帮助 文章目录 一、…

uniapp中解析markdown支持网页和小程序

对于markdown相信大家都不陌生&#xff0c;日常写文档或日常记录都用到的比较多&#xff0c;书写的是markdown的格式&#xff0c;实时预览的是转换后的html样式。本次实现的需求是在uniapp中转换markdown文本展示在不同的平台&#xff0c;主要平台是浏览器使用和微信小程序使用…

Instagram安全运营的10条策略

Instagram每月活跃用户15亿&#xff0c;是跨境外贸开发客户与广告引流的常用工具。本文总结10条Instagram运营基本策略与原则&#xff0c;帮助各位跨境人更好的了解平台规则&#xff0c;规避风险&#xff0c;提高投放效率&#xff01; 1、使用商业账号 企业在instagram 上进行…

北斗RTK高精度定位技术原理及优势

北斗RTK&#xff08;Real-Time Kinematic&#xff09;高精度定位技术是一种利用卫星导航系统进行实时定位的方法&#xff0c;它通过测量卫星信号的相位差来获得非常精确的位置信息。其原理和优势如下&#xff1a; 原理&#xff1a; 1. 载波相位差测量&#xff1a; RTK技术通过…

卷积过程详细讲解

1&#xff1a;单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 卷积过程如下&#xff1a; 相应的卷积核不断…

保姆级教程之VMD-SABO-KELM优化核极限学习机的西储大学轴承诊断

从数据处理&#xff0c;优化VMD特征提取&#xff0c;再到SABO&#xff08;减法平均优化器&#xff09;优化核极限学习机的故障诊断&#xff0c;实现故障诊断的全流程&#xff0c;其他类型的故障诊断均可参考此流程。 友情提示&#xff1a;对于刚接触故障诊断的新手来说&#xf…

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…

spring依赖注入详解(下)

Autowired注解依赖注入过程 一、findAutowireCandidates()实现 找出BeanFactory中类型为type的所有的Bean的名字&#xff0c;注意是名字&#xff0c;而不是Bean对象&#xff0c;因为我们可以根据BeanDefinition就能判断和当前type是不是匹配&#xff0c;不用生成Bean对象把re…

【多天线传输技术】BPSK调制信号在复高斯瑞利信道下Alamouti的误码率分析

%% [预处理] clc; clear; close all;%% [配置参数] N3000000; %数据点数&#xff08;个&#xff09; SNR_dB0:1:45; %信噪比&#xff08;dB形式&#xff09; SNR10.^(SNR_dB/10); %信噪比&#xff08;一般形式&#xff0c;Eb/N0&#xff09; Ps1; …

Linux Day10 ---Mybash

目录 一、Mybash介绍 1.1.mybash.c 打印函数 分割函数 命令函数 二、Mybash实现 2.1.打印函数 2.1.1需要使用到的功能函数 1.获取与当前用户关联的UID 2.获取与当前用户的相关信息---一个结构体&#xff08;passwd&#xff09; 3.获取主机信息 4.获取当前所处位置 5.给…

论文阅读 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGES

文章目录 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGESABSTRACT1 Introduction2 Related Work3 Focus-and-Detect3.1 Overview3.2 Focus Stage3.2.1 Generating Ground-Truth Boxes of Focal Regions Using Gaussian Mixture Model 3.3 Detection …

物种气候生态位动态量化与分布特征模拟

在全球气候快速变化的背景下&#xff0c;理解并预测生物种群如何应对气候变化&#xff0c;特别是它们的地理分布如何变化&#xff0c;已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟&#xff0c;不仅可以量化描述物种对环境的需求和适应性&#xff0c;预…

StableVideo:使用Stable Diffusion生成连续无闪烁的视频

使用Stable Diffusion生成视频一直是人们的研究目标&#xff0c;但是我们遇到的最大问题是视频帧和帧之间的闪烁&#xff0c;但是最新的论文则着力解决这个问题。 本文总结了Chai等人的论文《StableVideo: Text-driven consistency -aware Diffusion Video Editing》&#xff…