
我计算大概 1 个 g 的文件要 30-40 秒,但是 git 只需要 1-2 秒,有老哥们知道 git 是怎么计算的吗
1 liuidetmks 2023 年 9 月 8 日 git 有硬件加速吧 |
2 danbai PRO |
3 clino 2023 年 9 月 8 日 我用 sha1sum 算一个 1.4G 的花的时间是 5 秒,其实我理解相当多时间是在等磁盘读取 你这个 30-40 秒估计很有优化空间 |
4 shimanooo 2023 年 9 月 8 日 路过问一下现代文件系统有没有文件 hash 的接口? 只使用少量 IO 就能获得文件 hash. |
5 slowman 2023 年 9 月 8 日 显然是你自己不会用 1 个 g 的文件要 30-40 秒, 开什么玩笑 |
6 sardina 2023 年 9 月 8 日 via iPhone 阁下为何不 show code 呢 |
7 zhy0216 2023 年 9 月 8 日 via Android |
8 Trim21 2023 年 9 月 8 日 试了一下 go 也只需要 1-2 秒。你贴一下你的 go 代码。 |
9 AoEiuV020JP 2023 年 9 月 8 日 via Android 这种常见的劣化方案就是大量申请的临时空间,临时变量用完就丢,一直在申请和释放内存就慢, |
10 ShuWei 2023 年 9 月 8 日 go 不是很擅长并发么,现代多核处理器加 ssd 的组合,不至于这么慢吧,1g 左右的文件大小,1-3s 属于比较正常的范畴,检查下缓冲区跟异步并发这两块? |
11 kneo 2023 年 9 月 8 日 via Android 不会是你自己实现的吧?如果你不懂任何优化,至少照着算法山寨一个,30s 很正常。 |
13 nlzy 2023 年 9 月 9 日 via Android 你写的程序有问题,SHA-1 在现代 CPU 上不用硬件加速也能跑几百兆每秒,git 算 SHA-1 的性能完全就是合理水平。 既然你是 go 用户,那为什么不看看 go 标准库里的实现呢?手写的汇编,广泛验证的质量,详实的注释,连参考文章都列的清清楚楚。完全值得一看。 |
14 flyqie 2023 年 9 月 9 日 via Android show your go code |
15 qwerthhusn 2023 年 9 月 9 日 via iPhone 现代 CPU 支持 CPU 指令直接计算 sha ,不过即使软解也没那么慢,你代码问题 https://en.m.wikipedia.org/wiki/Intel_SHA_extensions |
16 sadfQED2 2023 年 9 月 9 日 via Android 代码发出来看看 |
17 lasuar 2023 年 9 月 9 日 代码啊代码 |
20 julyclyde 2023 年 9 月 10 日 |
21 lysS 2023 年 9 月 10 日 @julyclyde package main import ( "fmt" "hash/crc64" "sync" ) func main() { var data = []byte{ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, } iso := crc64.MakeTable(crc64.ISO) { r := crc64.Checksum(data, iso) fmt.Println(r) } { // concurrent crc := crc64.New(iso) wg := &sync.WaitGroup{} wg.Add(3) go func() { crc.Write(data[16:24]) wg.Done() }() go func() { crc.Write(data[0:8]) wg.Done() }() go func() { crc.Write(data[8:16]) wg.Done() }() wg.Wait() fmt.Println(crc.Sum64()) } } |