paj*_*ton 20 architecture filesystems performance fseek
这不是一个纯粹的编程问题,但是它会影响使用fseek()的程序的性能,因此了解它是如何工作的很重要.一点点免责声明,以免它被关闭.
我想知道在文件中间插入数据的效率如何.假设我有一个1MB数据的文件,然后我插入512KB偏移量的东西.与在文件末尾附加数据相比,效率有多高?只是为了让示例完整,我想要插入16KB的数据.
我理解答案因文件系统而异,但我认为常用文件系统中使用的技术非常相似,我只想获得正确的概念.
(免责声明:我只想在这个有趣的讨论中添加一些提示)恕我直言,有些事情需要考虑:
1)fseek不是主要的系统服务,而是库函数.要评估其性能,我们必须考虑如何实现文件流库.通常,文件I/O库在用户空间中添加了一层缓冲,因此如果目标位置在当前缓冲区内部或外部,则fseek的性能可能会大不相同.此外,I/O库使用的系统服务可能会有很大差异.即,在某些系统上,如果可能,库会广泛使用文件内存映射.
2)正如您所说,不同的文件系统可能以非常不同的方式运行.特别是,我希望事务性文件系统必须做一些非常聪明的事情,并且可能很昂贵,以准备在文件中间可能回滚中止的写操作.
3)现代操作系统具有非常积极的缓存算法.缓存中可能已存在"fseeked"文件,因此操作变得更快.但是,如果其他进程产生的整体文件系统活动变得重要,它们可能会降级很多.
任何意见?