You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中首次加载文件耗时久、后续耗时短的原因探究

为什么Go语言中首次加载文件耗时极长,后续耗时却极少?

核心原因:操作系统的文件系统页缓存(Page Cache)

这和Go语言本身无关,本质是操作系统的文件缓存机制在起作用:

  • 首次执行程序时,目标文件(比如你的24MB data.log)存储在磁盘上,程序需要通过磁盘IO将数据读取到内存中,这个过程受限于磁盘的读写速度,所以耗时明显更长(测试中156-178ms就是磁盘IO的耗时)。
  • 当文件被读取一次后,操作系统会自动将文件的常用数据缓存到内存的「页缓存」里。后续再次执行程序读取该文件时,直接从内存缓存中获取数据,无需再访问磁盘,因此耗时大幅降低(测试中17-21ms就是内存读写的耗时)。

结合你的测试验证

你的两次测试完全符合这个规律:

测试1:data.log文件

I:\Study\GO> .\goProgram.exe I:\data.log "BUILD SUCCESS"
true
Execution time : 156.4336ms

I:\Study\GO> .\goProgram.exe I:\data.log "BUILD SUCCESS"
true
Execution time : 19.1512ms

I:\Study\GO> .\goProgram.exe I:\data.log "BUILD SUCCESS"
true
Execution time : 19.5516ms

I:\Study\GO> .\goProgram.exe I:\data.log "BUILD SUCCESS"
true
Execution time : 18.5528ms

测试2:data1.log文件

I:\Study\GO> .\goProgram.exe I:\data1.log "BUILD SUCCESS"
true
Execution time : 178.5104ms

I:\Study\GO> .\goProgram.exe I:\data1.log "BUILD SUCCESS"
true
Execution time : 17.5497ms

I:\Study\GO> .\goProgram.exe I:\data1.log "BUILD SUCCESS"
true
Execution time : 21.0613ms

对你疑问的回应

Go语言标准库的文件读取操作不会自动构建缓存或索引(除非你在代码中手动实现了相关逻辑)。你看到的性能差异完全来自操作系统的页缓存优化——这是所有操作系统(Windows/Linux/macOS等)都会做的通用机制,换用其他语言编写相同逻辑的程序,也会出现一模一样的现象。


内容的提问来源于stack exchange,提问作者ShubhamWanne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:22:32