Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
643 人已学习
新⼈⾸单¥59
Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

04|单机吞吐优化(二):高性能数据处理三板斧

你好,我是徐逸。
通过上节课的学习,我们知道了提升单机吞吐的思路是定位到单机瓶颈资源。对于瓶颈资源,要么增加资源,比如提升单机 CPU、内存等的规格;要么减少单个请求对瓶颈资源的消耗,让相同的资源可以处理更多请求。
对于 CPU 和内存瓶颈,我们也介绍了容器类型的使用方法,从而降低 CPU 和内存资源消耗,提升单机吞吐。
有了数据类型,自然少不了对数据的处理。今天我们就来聊聊对于 CPU 和内存瓶颈,有哪些常用的高性能数据处理技巧。只要能够灵活运用这些技巧,我们就能降低单个请求对 CPU 和内存资源消耗,提升单机吞吐。
为了便于说明,我先构造一段代码,这段代码会循环做字符串拼接、整型转字符串和字符串转字节切片操作。我们今天会基于这段代码的性能优化过程,带你掌握这些高性能技巧。
package performance
import (
"fmt"
)
type User struct {
Id int
Name string
}
// GenerateIdsRaw 原始待优化函数
func GenerateIdsRaw(users []*User) (string, string, []byte) {
names := ""
idStr := ""
var nameByte []byte
for index := range users {
idStr = fmt.Sprint(users[index].Id)
names = names + "," + users[index].Name
nameByte = []byte(users[index].Name)
}
return idStr, names, nameByte
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 使用 strings.Builder 类型进行字符串拼接是降低资源消耗、提升单机吞吐的重要技巧之一。 2. 通过 Benchmark 测试和 CPU 火焰图分析,可以全面评估代码的性能表现,发现瓶颈并进行有针对性的优化。 3. 使用 strconv 库进行整型转换为字符串的方式,能明显提升性能,节约 CPU 和内存资源。 4. 使用 unsafe 包可以高效地将字符串转换为字节切片,避免字节数组的内存分配和拷贝,实现高性能类型转换。 5. 通过优化后的 Benchmark 测试,对 CPU 资源的消耗降低了27倍,对内存的消耗降低了379倍。 6. Golang官方文档和库函数中也特意提到了 strings.Builder 的高效性能,表明其在实际应用中的重要性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)