【发布时间】:2015-06-23 20:19:58
【问题描述】:
我正在寻找一种从磁盘并行获取具有某些属性的文件列表的快速方法。
属性:文件大小、文件绝对路径
目前我正在使用 boost 文件系统和带有目录迭代器的递归调用。 这对于小型数据集很好,但对于 50.000 个文件夹中的一百万个文件来说并不是很好。
使用环境: 操作系统:FreeBSD、Linux、Windows 文件系统:ZFS、ext4、NTFS
基本思路:
- 线程池
- SubTreeWalker 对象
- 线程间分区根文件夹
- 如果有惰性线程,subtreewalker 会为 subdir 中的每个新目录询问线程池
- 如果 4 == true,则在惰性线程中将目录分配给 subtreewalker 对象。
你觉得这个基本想法怎么样,听起来不错? 并行访问文件系统的 B+ 树有什么影响吗?
【问题讨论】:
-
并行磁盘访问听起来比顺序读取文件要慢。
-
进出硬盘的大部分数据都是串行的(即 SATA 接口)。那么,并行打开多个文件会有什么好处呢?
标签: c++ multithreading filesystems boost-filesystem