我计算大概 1 个 g 的文件要 30-40 秒,但是 git 只需要 1-2 秒,有老哥们知道 git 是怎么计算的吗
我计算大概 1 个 g 的文件要 30-40 秒,但是 git 只需要 1-2 秒,有老哥们知道 git 是怎么计算的吗
|
liuidetmksSep 8, 2023
1
git 有硬件加速吧
|
|
2
|
|
clinoSep 8, 2023
3
我用 sha1sum 算一个 1.4G 的花的时间是 5 秒,其实我理解相当多时间是在等磁盘读取
你这个 30-40 秒估计很有优化空间 |
|
shimanoooSep 8, 2023
4
路过问一下现代文件系统有没有文件 hash 的接口? 只使用少量 IO 就能获得文件 hash.
|
|
slowmanSep 8, 2023
5
显然是你自己不会用
1 个 g 的文件要 30-40 秒, 开什么玩笑 |
|
sardinaSep 8, 2023 via iPhone
6
阁下为何不 show code 呢
|
|
zhy0216Sep 8, 2023 via Android
7
|
|
Trim21Sep 8, 2023
8
试了一下 go 也只需要 1-2 秒。你贴一下你的 go 代码。
|
|
9
这种常见的劣化方案就是大量申请的临时空间,临时变量用完就丢,一直在申请和释放内存就慢,
|
|
ShuWeiSep 8, 2023
10
go 不是很擅长并发么,现代多核处理器加 ssd 的组合,不至于这么慢吧,1g 左右的文件大小,1-3s 属于比较正常的范畴,检查下缓冲区跟异步并发这两块?
|
|
kneoSep 8, 2023 via Android
11
不会是你自己实现的吧?如果你不懂任何优化,至少照着算法山寨一个,30s 很正常。
|
|
nlzySep 9, 2023 via Android
13
你写的程序有问题,SHA-1 在现代 CPU 上不用硬件加速也能跑几百兆每秒,git 算 SHA-1 的性能完全就是合理水平。
既然你是 go 用户,那为什么不看看 go 标准库里的实现呢?手写的汇编,广泛验证的质量,详实的注释,连参考文章都列的清清楚楚。完全值得一看。 |
|
flyqieSep 9, 2023 via Android
14
show your go code
|
|
qwerthhusnSep 9, 2023 via iPhone
15
现代 CPU 支持 CPU 指令直接计算 sha ,不过即使软解也没那么慢,你代码问题
https://en.m.wikipedia.org/wiki/Intel_SHA_extensions |
|
sadfQED2Sep 9, 2023 via Android
16
代码发出来看看
|
|
freemoonSep 9, 2023
17
代码啊代码
|
|
julyclydeSep 10, 2023
20
|
|
lysSSep 10, 2023
21
@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()) } } |