首页 > 其他分享 >Golang性能优化实践

Golang性能优化实践

时间:2024-06-13 23:43:16浏览次数:20  
标签:clear cap 实践 len Golang ints DEBUG 优化 size

内存警察

警惕一切隐式内存分配

典型case:

  函数返回了字符串、切片,警惕一切字符串

传进去的输入,函数内部重新分配了一个新的内存返回

对象复用

1.sync.pool

 保证有一个ch大小的对象可用

 假设有cpu核数那么多并发任务,可以保证gc的时候有保底在

 

2.局部cache

sync.pool毕竟加锁,要本地ctx能挂载临时对象集,那肯定比pool效率高

 currAccmulator在for循环之外的一个临时变量

 封装在ctx里面的一个临时变量,跟随ctx整个生命周期销毁

 storage存储,后续还能复用

slice复用

1.len与cap

func TestD(t *testing.T) {
    ints := make([]int, 0, 6)
    ints = append(ints, 6, 6, 6, 6, 6, 6)
    // The clear built-in function clears maps and slices.
    // For maps, clear deletes all entries, resulting in an empty map.
    // For slices, clear sets all elements up to the length of the slice
    clear(ints)
    logger.DEBUG("ints", ints, " cap: ", cap(ints), " len:", len(ints))
    ints = ints[:0] // len == 0, cap == 6 之前的元素还在
    logger.DEBUG("ints", ints, " cap: ", cap(ints), " len:", len(ints))
    ints = append(ints[:0], 1, 2, 3) // 这样就覆盖了原来的元素
    logger.DEBUG("ints", ints, " cap: ", cap(ints), " len:", len(ints))

    // recap
    additionalItems := 10
    intsLen := len(ints)
    if n := intsLen + additionalItems - cap(ints); n > 0 {
        ints = append(ints[:cap(ints)], make([]int, n)...)
    }
    ints = ints[:intsLen]
    // resize
    size := 10
    if cap(ints) > size {
        ints = ints[:size]
    } else {
        ints = make([]int, size)
    }
}
=== RUN   TestD
2024/06/13 23:24:27 [DEBUG] ints[0 0 0 0 0 0] cap: 6 len:6 
2024/06/13 23:24:27 [DEBUG] ints[] cap: 6 len:0 

2024/06/13 23:24:27 [DEBUG] ints[1 2 3] cap: 6 len:3 

 

2.string与bytes

跨类型复用

1.unsafe

2.arena

生命周期管理

标签:clear,cap,实践,len,Golang,ints,DEBUG,优化,size
From: https://www.cnblogs.com/twh233/p/18246974

相关文章

  • SDN VMware NSX网络原理与实践-NSX 网络虚拟化概览【1.3】
    第2章NSX网络虚拟化概览        网络虚拟化技术诞生后,有不少厂商都推出了所谓的网络虚拟化解决方案。这些厂商实现“网络虚拟化”的方式各异,有些是自己研发的项目,有些是通过收购,有些是利用开源项目进行再开发。而VMwareNSX网络虚拟化平台的基本架构到底是怎样......
  • 免费视频编辑神器 Tailor:智能裁剪、生成与优化!
    TailorTailor是令人惊叹的视频编辑神器!其人脸和语音剪辑精准无比,人脸识别能锁定人物画面,语音捕捉和裁剪独具魅力。视频生成方面,口播生成赋予图像灵魂,字幕生成准确契合,色彩生成让黑白鲜活,音频生成创造无限可能。优化上,背景更换如入奇幻世界,流畅度与清晰度也极佳。Tailor......
  • 【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 |
    目录一、再谈构造函数1.1构造函数体赋值1.2初始化列表1.所有的成员,既可以在初始化列表初始化,也可以在函数体内初始化2.每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)3.类中包含以下成员,必须放在初始化列表位置进行初始化:声明给缺省值也可以是其......
  • 项目性能优化方案
    前端性能优化的指标首屏速度,白屏时间等操作速度以及渲染速度等  首屏速度白屏时间渲染页面资源加载首屏js执行首屏数据请求Dom渲染首屏速度可以做的操作#收效很大的操作1.减少首屏资源体积(打包工具的压缩,异步加载,更新为体积更小的新版本,编写代码......
  • golang reflect 反射机制的使用场景
     Go语言中的reflect包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值。 以下是reflect包的一些典型使用场景: 1.动态类型判断与转换:当需要处理多种类型的变量且具体类型直到运行时才能确定时,可以使用反射来检查变量的实际类型,并在可能的情况......
  • 基于蛙跳优化的神经网络数据预测matlab仿真
    1.程序功能描述      通过蛙跳优化算法,优化神经网络的权值参数,然后使用优化后的神经网络模型对数据进行预测,输出预测曲线。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行  3.核心程序%数据归一化预处理Vmin1=min(X);Vmax1=max(X);......
  • m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 优化前:    优化后:    对比如下:   2.算法涉及理论知识概要       基于粒子群优化(ParticleSwarmOptimization,PSO)和长门控循环单元(GatedRecurrentUnit,GRU)网络的电力负荷预测算法,是一种融合......
  • seo如何优化
    哈喽,大家好,我是木头左,物联网搬砖工一名,致力于为大家淘出更多好用的AI工具!SEO如何优化一、了解SEO的基本概念SEO(SearchEngineOptimization),即搜索引擎优化,是指通过一系列技术手段,提高网站在搜索引擎中的自然排名,从而获得更多的免费流量。SEO的核心目标是提高网站的用户体验,让......
  • hive优化
    复制粘贴到md中查看Hive优化1.1 hive的随机抓取策略理论上来说,Hive中的所有sql都需要进行mapreduce,但是hive的抓取策略帮我们省略掉了这个过程,把切片split的过程提前帮我们做了。sethive.fetch.task.conversion=none;(一旦进行这么设置,select字段名也是需要进行mapreduce......
  • 隐语课程学习笔记6-逻辑回归LR与广义线性模型GLM开发实践
    隐语第6课,开始介绍具体的机器学习算法以及使用隐语模型进行真实数据的建模实验。首先介绍广义线性模型,广义线性模型(GLM)是线性模型的扩展,通过联系函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。它的特点是不强行改变数据的自然度量,数据可以具有非线性和非......