#iterator-adapter #iterator #fixed-size #chunks #reader #read #yield

read_chunk_iter

按固定大小块一次返回的迭代器适配器

2 个不稳定版本

0.2.0 2024年1月21日
0.1.0 2023年7月30日

509文件系统

MIT 许可证

51KB
958 代码行

read_chunk_iter

Crates.io Crates.io License

按固定大小块一次返回的迭代器适配器。

为什么不使用泛型迭代器组合 Read 对象呢?

一个简单的解决方案是使用迭代器适配器来读取文件的字节,例如 &BufReader::new(file_path).bytes().chunks(CHUNK_SIZE),使用 itertools 包提供 chunks 适配器。然而,使用泛型迭代器适配器比专用迭代器慢得多,在 examples 文件夹中的性能比较显示,速度降低了 2.5-40.5 倍。(这包括使用 BufReader 来减少底层 read 调用的次数。如果没有这种缓冲,bytes() 将为每个字节调用一次 read,从而导致速度大幅降低。)

此包提供了两种替代方案

  • ChunkedReaderIter,它同步地从底层 Read 对象读取,并在请求时返回数据块。
  • ThreadedChunkedReaderIter,它在单独的线程中执行读取,并将数据块传输到原始线程。

是否使用 ChunkedReaderIterThreadedChunkedReaderIter 取决于在执行其他计算时异步读取节省的时间是否超过了线程的开销。在使用之前,请针对您特定的用例进行基准测试,以确定哪一个更好。

功能

  • autodetect_vectored: 启用自动检测向量读取是否提供加速,并在提供加速时利用它们。此功能需要 nightly,但即使没有它,也可以手动选择向量读取。

计划的功能

  • fadvise: 使用 posix_fadvise 向整个文件发送 POSIX_FADV_SEQUENTIAL 信号,并提供使用 POSIX_FADV_DONTNEED 释放已产生数据文件系统缓存的选项。此功能默认启用,但在非 Unix 系统上不会执行任何操作。

依赖关系

~0–11MB
~58K SLoC