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

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

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

2556 次点击
所在节点    Go 编程语言
21 条回复
lysS
2023-09-10 17:07:45 +08:00
@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())
}
}

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

https://tanronggui.xyz/t/972115

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

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

© 2021 V2EX