2 个不稳定版本
0.2.0 | 2024年1月21日 |
---|---|
0.1.0 | 2023年7月30日 |
509 在 文件系统 中
51KB
958 代码行
read_chunk_iter
按固定大小块一次返回的迭代器适配器。
为什么不使用泛型迭代器组合 Read 对象呢?
一个简单的解决方案是使用迭代器适配器来读取文件的字节,例如 &BufReader::new(file_path).bytes().chunks(CHUNK_SIZE)
,使用 itertools
包提供 chunks
适配器。然而,使用泛型迭代器适配器比专用迭代器慢得多,在 examples
文件夹中的性能比较显示,速度降低了 2.5-40.5 倍。(这包括使用 BufReader
来减少底层 read
调用的次数。如果没有这种缓冲,bytes()
将为每个字节调用一次 read
,从而导致速度大幅降低。)
此包提供了两种替代方案
ChunkedReaderIter
,它同步地从底层Read
对象读取,并在请求时返回数据块。ThreadedChunkedReaderIter
,它在单独的线程中执行读取,并将数据块传输到原始线程。
是否使用 ChunkedReaderIter
或 ThreadedChunkedReaderIter
取决于在执行其他计算时异步读取节省的时间是否超过了线程的开销。在使用之前,请针对您特定的用例进行基准测试,以确定哪一个更好。
功能
- autodetect_vectored: 启用自动检测向量读取是否提供加速,并在提供加速时利用它们。此功能需要 nightly,但即使没有它,也可以手动选择向量读取。
计划的功能
- fadvise: 使用
posix_fadvise
向整个文件发送POSIX_FADV_SEQUENTIAL
信号,并提供使用POSIX_FADV_DONTNEED
释放已产生数据文件系统缓存的选项。此功能默认启用,但在非 Unix 系统上不会执行任何操作。
依赖关系
~0–11MB
~58K SLoC