#io-uring #async #fs #buffer #fs-file

tokio-uring

为 Tokio 异步运行时提供 io-uring 支持

6 个版本 (重大变更)

0.5.0 2024 年 5 月 27 日
0.4.0 2022 年 11 月 5 日
0.3.0 2022 年 3 月 4 日
0.2.0 2022 年 1 月 9 日
0.0.0 2020 年 11 月 14 日

#138 in 异步

Download history 3845/week @ 2024-05-03 3622/week @ 2024-05-10 3824/week @ 2024-05-17 3100/week @ 2024-05-24 4560/week @ 2024-05-31 4813/week @ 2024-06-07 4757/week @ 2024-06-14 3403/week @ 2024-06-21 3446/week @ 2024-06-28 5621/week @ 2024-07-05 6089/week @ 2024-07-12 6028/week @ 2024-07-19 4850/week @ 2024-07-26 3242/week @ 2024-08-02 4172/week @ 2024-08-09 2631/week @ 2024-08-16

15,916 每月下载量
35 仓库中使用 (直接使用 31 个)

MIT 许可证

290KB
4.5K SLoC

tokio-uring

此包通过公开一个与 Tokio 兼容但也可以驱动 io-uring 支持的资源的新运行时,为 Tokio 提供 io-uring 支持。任何与 Tokio 工作的库也支持 tokio-uring。此包提供了与 io-uring 工作的新资源类型。

API 文档 | 聊天

入门

使用 tokio-uring 需要启动一个 tokio-uring 运行时。此运行时内部管理主 Tokio 运行时和一个 io-uring 驱动程序。

在您的 Cargo.toml 中

[dependencies]
tokio-uring = { version = "0.5.0" }

在您的 main.rs 中

use tokio_uring::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tokio_uring::start(async {
        // Open a file
        let file = File::open("hello.txt").await?;

        let buf = vec![0; 4096];
        // Read some data, the buffer is passed by ownership and
        // submitted to the kernel. When the operation completes,
        // we get the buffer back.
        let (res, buf) = file.read_at(buf, 0).await;
        let n = res?;

        // Display the contents
        println!("{:?}", &buf[..n]);

        Ok(())
    })
}

要求

tokio-uring 需要一个非常新的 Linux 内核。(并非所有带有 io_uring 支持的内核都能工作)特别是 5.4.0 不工作(这是 Ubuntu 20.4 的标准)。然而,5.11.0 (Ubuntu hwe 图像)是可行的。

项目状态

tokio-uring 项目仍然非常年轻。目前,我们专注于支持文件系统和网络操作。最终,我们将添加所有 io-uring 兼容操作的安全 API。

许可证

本项目受 MIT 许可证 许可。

贡献

除非您明确声明,否则您有意提交以供tokio-uring包含的任何贡献,都应按MIT许可证授权,不附加任何额外条款或条件。

依赖项

~3–12MB
~118K SLoC