简短的回答:写两个和简介.
较长的答案与挥手相当:
覆盖文件将涉及以下系统调用:
open
write
close
创建新文件,删除旧文件以及重命名新文件将涉及以下系统调用:
open
write
close
unlink
rename
系统调用通常是程序中最慢的部分;通常,减少系统调用是加速程序的好方法.覆盖一个文件将重用操作系统的内部目录条目数据;这可能也会带来一些速度提升. (它们可能难以用VM开销的语言来衡量……)
假设您在一次写入中更新整个1K,那么您的文件足够小,应该以原子方式处理每个write(). (因为你关心性能,这似乎是一个安全的假设.)这确实意味着其他进程不应该看到部分写入,除非是灾难性的powerfailures和有损挂载选项. (不常见.)即使面对多次写入,文件重命名方法也能提供一致的文件.
但是,1K文件是一种非常低效的存储机制;许多文件系统将沿4k块写入文件.如果这些数据块仅存在于您的应用程序中,那么将它们写入某种类型的容器中可能是有意义的,一次几个. (Quake派生系统用它来读取zip文件中的地图,纹理等等,因为巨大的流式IO请求远远快于数千个较小的IO请求.)当然,如果您的应用程序正在编写,这将更难这些文件供其他应用程序使用,但如果文件很少共享,可能仍然值得研究.