欢迎入坑我的新项目: Go 语言高性能编程
source link: https://www.v2ex.com/t/735027
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
欢迎入坑我的新项目: Go 语言高性能编程
在实现 7days-golang 这个项目过程中,接触到了很多开源项目的源码,里面有很多优雅的实现,结合最近工作中的一些经历,启动了「 Go 语言高性能编程」这个开源电子书项目。Go 语言优秀的电子书其实蛮多的,比如 Go 语言原本,Go 语言实现与设计等,可能对大部分童鞋来说过于深奥了。「 Go 语言高性能编程」这个项目聚焦于编程实践,同时会有少量的原理分析,比较适合希望无痛进阶的初学者~
一个月利用碎片时间写了十篇文章,还顺便改造了下我的 hexo 博客模板,融合了 gitbook 的排版方式。
感兴趣的童鞋可以关注一波,这个项目也是一起兴起,比较肝,提交时间基本在凌晨了。七天用 Go 从零实现这个项目也会继续维护的,不过这个项目特别需要整块的时间,最近整块时间实在太少,新坑一直没填上。
项目地址:high-performance-go
kevinwan 26 天前 via iPhone |
youngce 26 天前 支持!!!!看过博主的 geecache 系列,太棒了
|
oxromantic 26 天前 减少体积那个。。。upx 就不要拿出来提了吧,另外都用 go 了,也不会在乎细微的体积差别了
|
gzdaijie 26 天前 via Android @oxromantic 因为在公司会做一些插件小工具,10MB 压缩到 3MB,7MB 的差异对我来说,是至关重要的,不知道有啥更好的压缩体积的方法?
|
wzw 26 天前 via iPhone 每一篇,都值得看,谢谢
|
gzdaijie 26 天前 via Android @Mitt 感谢建议,我可以再去探索下各种场景的实践。我自己服务器部署的服务是不会用的,但是一些插件的场景,考虑到设备空间,或是 hook 的场景,套在常用命令前执行,体积对性能上是有影响的。
|
wzw 26 天前 via iPhone 减少编译体积,会影响性能吗
|
SjwNo1 26 天前 收藏了 慢慢看
|
cabing 26 天前 棒棒哒,建议可以完善下 go 的并发工具。参考 juc
|
mouzhiyang 26 天前 |
CrazyBoyFeng 26 天前 减少体积这条现在意义不大,-s 和-w 参数能省的空间并不多。比较有效的就是 upx,但在启动时解压缩会多消耗 cpu 和内存。
不知道 golang 官方有没有出动态链接编译的计划。搭配发行 runtime environment 或者发行模块化动态链接库。做到一库多用。只有这样才能节省硬盘和内存。不过如此一来,就需要处理依赖问题。 现在这样静态编译挺不适合低端硬件的嵌入式编程的。ram 和 rom 都较小的情况下,一库多用才是经济合理的。 |
gzdaijie 26 天前 via Android @wzw upx 带壳压缩,优点是仍可以直接运行,缺点是,运行时动态解压。不过实际应用过程中,解压感觉几乎是无影响的,所以对体积比较敏感的场合还是推荐用的,比如嵌入式设备。体积会影响加载和网络传输时间。通过编译选项减小体积是能提高性能的。
|
oxromantic 26 天前 @gzdaijie 嵌入设备必须使用支持压缩的文件系统吧,这样 upx 也没必要了
|
gzdaijie 26 天前 via Android @oxromantic,嗯,这种是不需要的。但文件系统不是必须,嵌入式设备种类很多,家用路由器是,树莓派是,体积庞大的基站其实也是。不过因为体积和内存,Go 在这块的应用场景还非常有限,要求稍微高一点,就只能用 C 了。
|
CrazyBoyFeng 26 天前 @CrazyBoyFeng 我查到 go 已经有动态链接编译的模式了,出来的 helloworld 只有 22kb,但是因为 go 几乎没有二进制依赖库管理机制,至今极难面向用户推行这种模式。
|
gzdaijie 26 天前 via Android @CrazyBoyFeng 对的,动态链接是支持的,比如 cgo 编程,链接 C 库,类似于胶水。
|
CrazyBoyFeng 26 天前 不过虽然动态编译 helloworld 只有 16kb,但是动态链接编译 go 标准库有 32mb 大小。如果应用少的话,可能还不如静态编译应用省空间。
http://z-rui.github.io/post/2016/07/golang-shared-library/ 不知道有没有分模块编译动态库的方式,类似 python 那样。 |
raaaaaar 26 天前 via Android 1 催一个 7 天
|
darksword21 26 天前 1 🐎️住!
|
ShiningMage 26 天前 1 |
yixinlove 26 天前 1 |
jmyz0455 26 天前 请问,go 写 web 好写吗?撸 crud 快吗?
|
yhzwy 26 天前 go 一般是做什么领域的比较多 业务开发方向的
|
lewinlan 26 天前 via Android 朋友,你的代码有不止一个问题啊。
比如 for 和 range 的性能比较那一段,二者根本就是不同的代码,当然性能有差距了。 建议再好好理解一下 range 的原理 |
Ehco1996 26 天前 via iPhone 支持 我是从 geeorm 入坑的哈哈
希望能讲讲网络相关的优化 比如 buffer poll,splice 特性之类的 |
Takamine 26 天前 via Android 支持,我记得还有 Python 的坑,楼主别忘了。:doge:
|
gzdaijie 26 天前 via Android @lewinlan 哈哈,感谢你的建议。工作中的一些总结和尝试,大部分是自己的理解,错误在所难免,不过写之前也在尽可能多地参考。在讨论中慢慢完善和修正吧。早上刚合入了一个 PR 。
|
gzdaijie 26 天前 via Android 这个贴的批评和建议价值都很大。期待各位大大的 issue 和 PR 。今晚打算把 upx 这部分讨论,还有把有个老哥发起的静态链接的贴的内容传送门到博客中去,留个参考。
|
eudore 26 天前 1 建议加上 sync.Pool 和 unsafe 两篇,都是常用的性能优化方法。
|
cnwlei 26 天前 1 正在学 go,等我入门了再看 doge
|
hbolive 26 天前 1 |
p1gd0g 26 天前 1 Remember that "microbenchmark" is a synonym for "lie". There is no semantic difference between the two.
|
Shawdon 26 天前 1 |
zhoudaiyu 26 天前 1 虽然现在还看不懂,但是先收藏🐱
|
dany813 26 天前 1 |
teaaa 26 天前 1 |
Yoock 26 天前 1 已经在看了
|
zhuzhibin 26 天前 via iPhone 1 7 天俺可以学会不
|
Caratpine 26 天前 1 支持一下,很给力
|
b00tyhunt3r 26 天前 1 |
f6x 26 天前 1 文风简洁. +1
|
ai277014717 26 天前 1 不错正在写 go 收藏一下
|
gzdaijie 26 天前 @zhuzhibin 哈哈,每天 70 行代码,你可以的。借楼感谢下各位小伙伴。7 天系列的一开始也有很多 bug,感谢各位小伙伴在评论区的各种质疑和贡献,现在除了极少数没解决的 bug,其他部分的代码相对是比较精炼了。新项目也会积极收集大家的批评和建议,慢慢完善的。
|
gzdaijie 26 天前 没来得及一一回复的小伙伴,发送感谢来表达我的谢意了。关于 benchmark 表象下的性能问题,突然想到最近在 BiliBili 看的王德峰老师的《资本论》,提到马克思的哲学革命,剥离范畴进行现象还原,蛮有意思的,比如两个高级灵长类动物在肉搏,不同范畴下就会有不同的事实表述,警匪之战,或是两人斗殴,或是其他,还可以顺便吸一口华子。
|
f6x 26 天前 1 @gzdaijie 页面留言失败, 这里发给你吧. <如何退出协程>一文
* 2.1 代码应为 `done := make(chan bool, 1)` * 部分场景可用 sync.WaitGroup 简化代码 |
Donne 26 天前 1 |
wellhope 26 天前 via iPhone 1 👍🏻👍🏻已看了不少了,很受用
|
pythonee 26 天前 1 |
meiyoumingzi6 26 天前 via iPhone 1 |
eudore 26 天前 1 @gzdaijie sync.Pool 不算么,很重要的性能优化方法,列表这些感觉蛮基础的。还有一些其他高性能的技巧,例如:slice 和 map 预分配、io.Reader 接口、tcmalooc 对其、for 访问树减少递归的函数调用
|
mango88 25 天前 1 |
lucky4 25 天前 1 支持一下,最近在看 the way to go,等我看完了再学习你的文章
|
yyzq007 25 天前 1 |
wohenlanya 25 天前 1 |
barbery 25 天前 1 不错 有意思 关注一下
|
gakkiismywife1 25 天前 1 |
zackkson1991 25 天前 1 支持一下。
|
freefcw 25 天前 1 不错不错,虽然没空写 go 了,还是要支持支持
|
nicoley 25 天前 1 好东西啊!现在正在学 Go
|
foursking 25 天前 1 已关注,看了几章都是干货
|
zhangzhang 25 天前 1 |
zhengdai1990 25 天前 1 |
kevinwan 25 天前 via iPhone github go 月榜里 7days-golang 和 go-zero 上下铺🤝
|
ptnan 25 天前 是大佬, 大佬的类 gin 和类 xcache 我都学习过, 在面试的时候提供了很大的帮助
|
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK