为什么我用 go 写的 sha-1,计算没有 git 的快速 sha-1

2023-09-08 17:47:59 +08:00
 pdxjun

我计算大概 1 个 g 的文件要 30-40 秒,但是 git 只需要 1-2 秒,有老哥们知道 git 是怎么计算的吗

2510 次点击
所在节点    Go 编程语言
21 条回复
liuidetmks
2023-09-08 18:01:04 +08:00
git 有硬件加速吧
danbai
2023-09-08 18:04:28 +08:00
clino
2023-09-08 18:12:17 +08:00
我用 sha1sum 算一个 1.4G 的花的时间是 5 秒,其实我理解相当多时间是在等磁盘读取
你这个 30-40 秒估计很有优化空间
shimanooo
2023-09-08 18:16:17 +08:00
路过问一下现代文件系统有没有文件 hash 的接口? 只使用少量 IO 就能获得文件 hash.
1423
2023-09-08 18:18:01 +08:00
显然是你自己不会用
1 个 g 的文件要 30-40 秒, 开什么玩笑
sardina
2023-09-08 18:26:03 +08:00
阁下为何不 show code 呢
zhy0216
2023-09-08 18:37:51 +08:00
Trim21
2023-09-08 18:46:31 +08:00
试了一下 go 也只需要 1-2 秒。你贴一下你的 go 代码。
AoEiuV020JP
2023-09-08 19:40:25 +08:00
这种常见的劣化方案就是大量申请的临时空间,临时变量用完就丢,一直在申请和释放内存就慢,
ShuWei
2023-09-08 22:10:43 +08:00
go 不是很擅长并发么,现代多核处理器加 ssd 的组合,不至于这么慢吧,1g 左右的文件大小,1-3s 属于比较正常的范畴,检查下缓冲区跟异步并发这两块?
kneo
2023-09-08 22:48:09 +08:00
不会是你自己实现的吧?如果你不懂任何优化,至少照着算法山寨一个,30s 很正常。
kneo
2023-09-08 22:49:22 +08:00
@kneo 不知道怎么修改回复……“至少”=>“只是”。
nlzy
2023-09-09 00:07:32 +08:00
你写的程序有问题,SHA-1 在现代 CPU 上不用硬件加速也能跑几百兆每秒,git 算 SHA-1 的性能完全就是合理水平。

既然你是 go 用户,那为什么不看看 go 标准库里的实现呢?手写的汇编,广泛验证的质量,详实的注释,连参考文章都列的清清楚楚。完全值得一看。
flyqie
2023-09-09 08:22:03 +08:00
show your go code
qwerthhusn
2023-09-09 09:33:05 +08:00
现代 CPU 支持 CPU 指令直接计算 sha ,不过即使软解也没那么慢,你代码问题
https://en.m.wikipedia.org/wiki/Intel_SHA_extensions
sadfQED2
2023-09-09 10:23:33 +08:00
代码发出来看看
lasuar
2023-09-09 10:33:34 +08:00
代码啊代码
julyclyde
2023-09-10 11:42:55 +08:00
@ShuWei 这东西咋并发?
lysS
2023-09-10 12:02:55 +08:00
@julyclyde sha 应该不可以,如果是 crc 支持 update ,就可以用并行
julyclyde
2023-09-10 12:05:29 +08:00
@lysS “sha 不可以”和我理解的一样,hash 类的计算都有前后依赖

不过 crc 这个我没听懂。主要是我也不懂 crc ,所以缺乏理解你这句话的基础知识

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/972115

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX