Golang Go语言高性能编程新项目欢迎入坑

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言高性能编程新项目欢迎入坑

在实现 7days-golang 这个项目过程中,接触到了很多开源项目的源码,里面有很多优雅的实现,结合最近工作中的一些经历,启动了「 Go 语言高性能编程」这个开源电子书项目。Go 语言优秀的电子书其实蛮多的,比如 Go 语言原本,Go 语言实现与设计等,可能对大部分童鞋来说过于深奥了。「 Go 语言高性能编程」这个项目聚焦于编程实践,同时会有少量的原理分析,比较适合希望无痛进阶的初学者~

一个月利用碎片时间写了十篇文章,还顺便改造了下我的 hexo 博客模板,融合了 gitbook 的排版方式。

感兴趣的童鞋可以关注一波,这个项目也是一起兴起,比较肝,提交时间基本在凌晨了。七天用 Go 从零实现这个项目也会继续维护的,不过这个项目特别需要整块的时间,最近整块时间实在太少,新坑一直没填上。

项目地址:high-performance-go


更多关于Golang Go语言高性能编程新项目欢迎入坑的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

85 回复

支持

更多关于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 写 web 好写吗?撸 crud 快吗?

复杂的应用上,go 的生态比起 java 还是差挺多。简单网站区别不大。

go 一般是做什么领域的比较多 业务开发方向的

可以多关注 go 比较知名的项目,微服务,系统编程(容器,数据库,文件系统等),以及一些性能工具会比较多。

感谢老哥给的 压缩方案, 之前一直在找没找到… 美滋滋

朋友,你的代码有不止一个问题啊。
比如 for 和 range 的性能比较那一段,二者根本就是不同的代码,当然性能有差距了。
建议再好好理解一下 range 的原理

支持 我是从 geeorm 入坑的哈哈

希望能讲讲网络相关的优化
比如 buffer poll,splice 特性之类的

支持,我记得还有 Python 的坑,楼主别忘了。:doge:

哈哈,感谢你的建议。工作中的一些总结和尝试,大部分是自己的理解,错误在所难免,不过写之前也在尽可能多地参考。在讨论中慢慢完善和修正吧。早上刚合入了一个 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语言的垃圾回收机制来优化内存使用。

加入我们的项目,你将获得以下机会:

  1. 实战经验:直接参与高性能系统的设计与开发,积累宝贵的实战经验。
  2. 技术成长:与团队中的技术大牛交流切磋,不断提升自己的技术水平。
  3. 职业发展:在高性能编程领域建立自己的专业声誉,为未来的职业发展铺平道路。

我们期待有志于在高性能编程领域深耕细作的你加入我们的团队。无论你是Go语言的新手还是老鸟,只要你对技术充满热情,愿意不断学习和挑战自己,我们都热烈欢迎你的到来!

让我们一起,用Go语言书写高性能编程的新篇章!如果你有任何疑问或想要了解更多信息,请随时联系我们。期待与你携手共进,共创辉煌!

回到顶部