#file #async #delay #pwrite #pread

seekable-async-file

异步 pread 和 pwrite,可选延迟同步和指标

19 个版本 (12 个重大更新)

0.12.0 2023 年 7 月 13 日
0.11.1 2023 年 4 月 24 日
0.5.3 2023 年 3 月 26 日

#843文件系统


5 crates 中使用

Apache-2.0

19KB
354

SeekableAsyncFile

此库将提供一个 SeekableAsyncFile 结构体,其功能类似于 tokio::fs::File。它提供了异步的 read_atwrite_at 方法,这些方法在当前的 Tokio 中不可用。

入门指南

将其添加到项目中,例如

cargo add seekable-async-file

查看 文档 以获取使用说明。

延迟同步

提供了 write_at_with_delayed_sync 方法来调用 writefdatasync,但同步调用将在未来的某个时间进行。返回的 future 不会解决,直到同步调用完成并成功。这是一个性能优化,尝试批量处理多个写入的单个同步,但仍保持调用只有在成功写入磁盘时才完成的语义。

如果使用此功能,请确保在后台执行 start_delayed_data_sync_background_loop 方法,例如使用 tokio::spawntokio::join!

指标

通过 SeekableAsyncFileMetrics 结构体填充指标。所有值都是原子的,因此可以使用提供的获取器方法在任何时间从任何线程安全地读取它们。这旨在用于更大的系统(例如数据库、对象存储、缓存)或 I/O 子系统。

模式

mmap(默认)

默认情况下,将在文件上创建一个内存映射。这意味着可以针对所有支持 mmap 的平台,而不是仅针对支持 preadpwrite 的 Unix 平台。

tokio_file

启用 tokio_file 功能将导致在标准文件描述符上使用 preadpwrite 而不是 mmap。请确保禁用默认启用的 mmap 功能。

目标平台必须支持 std::os::unix::fs::FileExt

功能

出于实验目的,还有其他可以切换的 Cargo 功能

  • mmap: (默认) 使用 mmap 而不是 preadpwrite
  • tokio_file:使用 preadpwrite,配合 tokio::spawn_blocking

依赖关系

~4.5–6.5MB
~108K SLoC