微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Linux文件系统读取文件的时间复杂度是多less?

假设在我的文件系统中有很多的目录(比如100.000 ),并且在每个目录中有相似数量的目录。 每个目录可以包含任意数量文件,但通常不会超过几个。 这个结构进入一个不变的深度( 10 )。

我的问题是,如果我从这个目录结构中读取文件(比如: /dir-34/dir-215/dir-345/file1使用Paths.get()比较时间复杂性(在读操作)从这样一个简单的文件系统读取文件

/dir1 /dir2 /dir3 file1 /dir4 file2

注意:这只是一个理论问题,我只想知道目录中的目录/文件的数目是否正在尝试打开文件,这对读取操作的速度有任何影响。

在Windows上从主文件获取信息

麻烦得到incotify工作

文件系统信息 – 如何查询

如何在没有pipe理员权限的情况下在Windows XP上复制locking文件(设备或资源繁忙错误

dd中ibs / obs / bs的用途

共享分区Ubuntu和Windows

如何写一个文件,然后读回来validation它的内容,确保你得到的是磁盘而不是caching

如何在init中挂载filesystem.git目录?

如何在linux kernel 3.5编程中用null / 0s / 1sreplace文件内容

Android文件系统日记

如果/path/to/file是可用的,(注意:性能和时间复杂性依赖于磁盘结构和底层文件系统的实现,ex btrfs,一切都是b-tree,ext4和XFS都使用H – 树)

因此,对于遍历目录结构直到叶节点(包含文件的目录),平均情况时间复杂度应该是O(logN),而最坏情况是O(N),N =树中没有目录。 最糟糕的情况是当你在N-1下创建第N个目录,在N-2中创建第N-1个目录时,依此类推…直到根目录,在树中形成一个单独的分支。 理想情况下,如果您有完整路径,则不必从根目录遍历树中的所有目录。

那么如果你的底层FS支持目录索引和哈希,每次查找都需要另外的O(1)来查找目录中的文件。 因此,O(logN)+ O(1),即忽略低阶项,它应该只有O(logN),其中N是级别。

一些流行的文件系统比旧的文件系统使用更高效的数据结构。 和XFS一样,ext4认打开目录散列(如@ninjalj指出的那样)。 这意味着单个目录中的查找预计平均需要O(1) (如果路径具有固定的最大数量的子目录,那么恒定的时间)。 这遵循哈希函数本身的性能

即使每个目录有大量的文件,访问单个文件的速度也非常快 – 但只有当您拥有完整的路径时。 如果没有完整的路径,而需要查看模式的目录,则目录中的条目数目将面临O(n) 。 对于认的系统级目录读取调用,读取大小(32k)会进一步加剧。

(虽然ext4目录可以有大量的文件,但它们被限制为64000个子目录条目。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐