Golang性能优化实践

news/2024/12/29 16:59:19/文章来源:https://www.cnblogs.com/twh233/p/18246974

内存警察

警惕一切隐式内存分配

典型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))// recapadditionalItems := 10intsLen := len(ints)if n := intsLen + additionalItems - cap(ints); n > 0 {ints = append(ints[:cap(ints)], make([]int, n)...)}ints = ints[:intsLen]// resizesize := 10if 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

生命周期管理

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux+windows跨端md软件选择(未找到)

目的 windows上使用typora当初是通过破解的方式实现的。现在装双系统时想做做笔记,没有一个管理的软件用起来很不方便。 要求正常编辑,没有难以忍受的问题。 目录管理及大纲(基于标题层级) linux+windows双端,且linux端能够读取。 从粘贴图片能够在相应的img目录下创建图片…

c# 获取年,月,日,时,分,秒,星期几

this.nian.Text = DateTime.Now.Year.ToString(); //获取年 this.yue.Text = DateTime.Now.Month.ToString(); //获取月 this.ri.Text = DateTime.Now.Day.ToString(); //获取日 this.xingqi.Text = DateTime.Now.ToString("dddd"); //获取周几 this.shijian.Text = …

2024-06-13 闲话

2024-06-13 闲话今日最乐

多系统修改默认启动系统,grub

问题 我的电脑装了Windows 和 kUbuntu双系统,但是默认是启动kUbuntu的,作为一个使用了多年windows的普通用户,我更希望默认启动是Windows而不是Linux。因此需要修改顺序。 解决 使用root权限修改/boot/grub/grub.cfg文件。 很多文章里都说windows是4,但是我设置了并没有反应…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记:<% php代码 %> 短标记: 脚本标记: 标准标记(常用): 简写风格: ASP风格:<% php代码 %>注意:简写风格和ASP风格需要在php.ini配置文件中修改以下配置为on,移植性差 short_open_tag = on asp_tags = on<ht…

Linux脚本语言入门.md

0、shell介绍 1)Shell是什么? Shell是一个命令行解释器,它为用户提供一个详Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的…

排查Java进程CPU占用高之三板斧

写在前面 线上环境突然出现Java进程CPU占用率持续超过100%的问题,该如何排查并定位呢? 问题一:我们如何知道线上环境的那个服务器(或者哪个Docker容器)出现了CPU持续高的故障了呢? 如果是有比较完善的监控设施,当出现CPU持续高时可以通过发送报警通知的方式告知开发人员…

joker靶场

joker ifconfig看ip先进个rootnmap扫一下,nmap 192.168.1.0/24 扫到了这个开了80端口和8080端口的网段御剑扫一下目录secret.txt/phpinfo.php 可以看到操作系统为Linux的ubuntu,还能看到一些别的配置文件,中间件等信息既然开了8080就去看看啥也没有,看看8080(这里用的文档…

基环树和笛卡尔树

1.基环树 定义:有\(n\)个点和\(n\)条边的图,就是给树连了一条边,此时图中恰好只有一个环 解决这类问题时,通常断环,变成普通的树的问题,然后再特殊处理环 P2607 [ZJOI2008] 骑士 click 断环成树后就跟没上司一样是个树形dp,注意森林,long long就行了,具体细节见这里 P…

vue/cli4跑单个组件测试

环境直接跑一个vue组件,正常的命令是这样的vue serve src/components/demo1.vue输出提示:Command vue serve requires a global addon to be installed.Please run npm i -g @vue/cli-service-global and try again.再次安装npm i -g @vue/cli-service-global

ACCESS 在数据表中实现简单计算

Private Sub 权重_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode <> vbKeyReturn And KeyCode <> vbKeyUp And KeyCode <> vbKeyDown And vbKeyTab Then Exit Sub 权重.Text = M1.CalculateExpression(权重.Text) End Sub公共函数 Function C…

PIC18 bootloader之RS485 bootloader

这个PIC18 RS485 bootloader是为工业级产品开发的,是一款工业级的bootloader 了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。不知道为什么,现在工业控制…