Golang Go语言高性能编程新项目欢迎入坑
Golang Go语言高性能编程新项目欢迎入坑
在实现 7days-golang 这个项目过程中,接触到了很多开源项目的源码,里面有很多优雅的实现,结合最近工作中的一些经历,启动了「 Go 语言高性能编程」这个开源电子书项目。Go 语言优秀的电子书其实蛮多的,比如 Go 语言原本,Go 语言实现与设计等,可能对大部分童鞋来说过于深奥了。「 Go 语言高性能编程」这个项目聚焦于编程实践,同时会有少量的原理分析,比较适合希望无痛进阶的初学者~
一个月利用碎片时间写了十篇文章,还顺便改造了下我的 hexo 博客模板,融合了 gitbook 的排版方式。
-
序言
-
第一章 性能分析
-
第二章 常用数据结构
-
第三章 并发编程
-
第四章 编译优化
-
附录 Go 语言陷阱
感兴趣的童鞋可以关注一波,这个项目也是一起兴起,比较肝,提交时间基本在凌晨了。七天用 Go 从零实现这个项目也会继续维护的,不过这个项目特别需要整块的时间,最近整块时间实在太少,新坑一直没填上。
项目地址:high-performance-go
更多关于Golang Go语言高性能编程新项目欢迎入坑的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
活捉大佬一枚,关注了~
共建 Go 生态🤝
支持!!!!看过博主的 geecache 系列,太棒了
减少体积那个。。。upx 就不要拿出来提了吧,另外都用 go 了,也不会在乎细微的体积差别了
因为在公司会做一些插件小工具,10MB 压缩到 3MB,7MB 的差异对我来说,是至关重要的,不知道有啥更好的压缩体积的方法?
笔芯~
#6 要是 windows 这种用户类的软件可能 upx 有点用,不然可能会起反效果,upx 的解压过程在内存里,没必要为了省那点硬盘浪费内存
每一篇,都值得看,谢谢
感谢建议,我可以再去探索下各种场景的实践。我自己服务器部署的服务是不会用的,但是一些插件的场景,考虑到设备空间,或是 hook 的场景,套在常用命令前执行,体积对性能上是有影响的。
减少编译体积,会影响性能吗
收藏了 慢慢看
棒棒哒,建议可以完善下 go 的并发工具。参考 juc
支持
减少体积这条现在意义不大,-s 和-w 参数能省的空间并不多。比较有效的就是 upx,但在启动时解压缩会多消耗 cpu 和内存。
不知道 golang 官方有没有出动态链接编译的计划。搭配发行 runtime environment 或者发行模块化动态链接库。做到一库多用。只有这样才能节省硬盘和内存。不过如此一来,就需要处理依赖问题。
现在这样静态编译挺不适合低端硬件的嵌入式编程的。ram 和 rom 都较小的情况下,一库多用才是经济合理的。
upx 带壳压缩,优点是仍可以直接运行,缺点是,运行时动态解压。不过实际应用过程中,解压感觉几乎是无影响的,所以对体积比较敏感的场合还是推荐用的,比如嵌入式设备。体积会影响加载和网络传输时间。通过编译选项减小体积是能提高性能的。
嵌入设备必须使用支持压缩的文件系统吧,这样 upx 也没必要了
,嗯,这种是不需要的。但文件系统不是必须,嵌入式设备种类很多,家用路由器是,树莓派是,体积庞大的基站其实也是。不过因为体积和内存,Go 在这块的应用场景还非常有限,要求稍微高一点,就只能用 C 了。
我查到 go 已经有动态链接编译的模式了,出来的 helloworld 只有 22kb,但是因为 go 几乎没有二进制依赖库管理机制,至今极难面向用户推行这种模式。
非常感谢你的建议,才刚刚开始写不久,通过讨论慢慢地拓宽视野。
对的,动态链接是支持的,比如 cgo 编程,链接 C 库,类似于胶水。
不过虽然动态编译 helloworld 只有 16kb,但是动态链接编译 go 标准库有 32mb 大小。如果应用少的话,可能还不如静态编译应用省空间。
http://z-rui.github.io/post/2016/07/golang-shared-library/
不知道有没有分模块编译动态库的方式,类似 python 那样。
催一个 7 天
🐎️住!
标记一下
标记一下
复杂的应用上,go 的生态比起 java 还是差挺多。简单网站区别不大。
go 一般是做什么领域的比较多 业务开发方向的
可以多关注 go 比较知名的项目,微服务,系统编程(容器,数据库,文件系统等),以及一些性能工具会比较多。
感谢老哥给的 压缩方案, 之前一直在找没找到… 美滋滋
朋友,你的代码有不止一个问题啊。
比如 for 和 range 的性能比较那一段,二者根本就是不同的代码,当然性能有差距了。
建议再好好理解一下 range 的原理
支持 我是从 geeorm 入坑的哈哈
希望能讲讲网络相关的优化
比如 buffer poll,splice 特性之类的
哈哈,感谢你的建议。工作中的一些总结和尝试,大部分是自己的理解,错误在所难免,不过写之前也在尽可能多地参考。在讨论中慢慢完善和修正吧。早上刚合入了一个 PR 。
嗯,网络异步 IO,多路复用这一块的确是比较某意思的。写法上接近 C 语言编程了。
啊,这。。。过于细心了。
哈哈,有场景用上了是最大的支持了~
这个贴的批评和建议价值都很大。期待各位大大的 issue 和 PR 。今晚打算把 upx 这部分讨论,还有把有个老哥发起的静态链接的贴的内容传送门到博客中去,留个参考。
建议加上 sync.Pool 和 unsafe 两篇,都是常用的性能优化方法。
正在学 go,等我入门了再看 doge
支持!
Remember that “microbenchmark” is a synonym for “lie”. There is no semantic difference between the two.
姿瓷
虽然现在还看不懂,但是先收藏🐱
学
感谢建议,记下了。unsafe 数据库 bbolt 用得蛮多的,用来做内存映射和数据格式转换,有限减少内存拷贝。
支持:)
哈哈,这个观点有意思。在 benchmark 之外,找到一些理论支撑会好一些。不过表象本身也有一定的作用。
已经在看了
7 天俺可以学会不
支持一下,很给力
马
文风简洁. +1
不错正在写 go 收藏一下
哈哈,每天 70 行代码,你可以的。借楼感谢下各位小伙伴。7 天系列的一开始也有很多 bug,感谢各位小伙伴在评论区的各种质疑和贡献,现在除了极少数没解决的 bug,其他部分的代码相对是比较精炼了。新项目也会积极收集大家的批评和建议,慢慢完善的。
没来得及一一回复的小伙伴,发送感谢来表达我的谢意了。关于 benchmark 表象下的性能问题,突然想到最近在 BiliBili 看的王德峰老师的《资本论》,提到马克思的哲学革命,剥离范畴进行现象还原,蛮有意思的,比如两个高级灵长类动物在肉搏,不同范畴下就会有不同的事实表述,警匪之战,或是两人斗殴,或是其他,还可以顺便吸一口华子。
页面留言失败, 这里发给你吧. <如何退出协程>一文
* 2.1 代码应为 done := make(chan bool, 1)
* 部分场景可用 sync.WaitGroup 简化代码
持续关注
👍🏻👍🏻已看了不少了,很受用
感谢分享
支持一下
sync.Pool 不算么,很重要的性能优化方法,列表这些感觉蛮基础的。还有一些其他高性能的技巧,例如:slice 和 map 预分配、io.Reader 接口、tcmalooc 对其、for 访问树减少递归的函数调用
,感谢,都记下了,逐步加进去~ sync.Pool 减少对象创建,减轻 GC 压力,在网络通信中是非常有用的。
代码错误 fixed,WaitGroup 考虑单独写一下~
抓住大佬两枚,哈哈
支持一下
支持一下,最近在看 the way to go,等我看完了再学习你的文章
支持支持
标记下
不错 有意思 关注一下
标记下
支持一下。
不错不错,虽然没空写 go 了,还是要支持支持
我也从你这里学到了一些东西,共勉共勉~
好东西啊!现在正在学 Go
已关注,看了几章都是干货
干货满满
膜拜大佬
github go 月榜里 7days-golang 和 go-zero 上下铺🤝
是大佬, 大佬的类 gin 和类 xcache 我都学习过, 在面试的时候提供了很大的帮助
大佬的是生产项目,我的是 Demo 项目,含金量完全不一样的,致敬。
哈哈,面试能提供帮助,这就很开心了。开源的一些设计的确是能够让人耳目一新的,我在学习这些开源项目之前,很多算法、名词听都没听说过。
大佬别谦虚,能给用户带来价值就是好项目
欢迎各位对高性能编程充满热情的开发者们加入我们的Golang新项目!在这里,你将有机会深入探索Go语言(Golang)的精髓,利用其强大的并发模型和高效的内存管理机制,打造出性能卓越的应用。
Go语言以其简洁的语法、强大的标准库和高效的编译速度,在高性能编程领域崭露头角。我们的新项目将充分利用这些优势,致力于构建高并发、低延迟的系统。通过实践,你将学习到如何合理使用goroutines和channels来实现高效的并发处理,以及如何利用Go语言的垃圾回收机制来优化内存使用。
加入我们的项目,你将获得以下机会:
- 实战经验:直接参与高性能系统的设计与开发,积累宝贵的实战经验。
- 技术成长:与团队中的技术大牛交流切磋,不断提升自己的技术水平。
- 职业发展:在高性能编程领域建立自己的专业声誉,为未来的职业发展铺平道路。
我们期待有志于在高性能编程领域深耕细作的你加入我们的团队。无论你是Go语言的新手还是老鸟,只要你对技术充满热情,愿意不断学习和挑战自己,我们都热烈欢迎你的到来!
让我们一起,用Go语言书写高性能编程的新篇章!如果你有任何疑问或想要了解更多信息,请随时联系我们。期待与你携手共进,共创辉煌!