11 个版本 (7 个破坏性更新)

0.9.0 2024年5月24日
0.8.0 2023年8月29日
0.7.0 2022年4月21日
0.6.0 2021年9月18日
0.1.1 2017年7月26日

#207 in 异步

Download history 1258/week @ 2024-05-02 651/week @ 2024-05-09 586/week @ 2024-05-16 845/week @ 2024-05-23 450/week @ 2024-05-30 480/week @ 2024-06-06 517/week @ 2024-06-13 224/week @ 2024-06-20 290/week @ 2024-06-27 276/week @ 2024-07-04 373/week @ 2024-07-11 860/week @ 2024-07-18 732/week @ 2024-07-25 491/week @ 2024-08-01 516/week @ 2024-08-08 622/week @ 2024-08-15

2,472 每月下载次数
用于 5 crates

MIT/Apache

13KB
165

mio-aio

一个用于将文件 I/O 与 mio 集成的库,使用 POSIX AIO 和 kqueue。文件 I/O 可以无缝地与同一事件循环中的网络 I/O 和定时器混合。

Build Status

# Cargo.toml
[dependencies]
mio-aio = "0.7.0"
mio = "0.8.0"

用法

此 crate 的用法基于 mio_aio::AioCb 类型,它是对 nix::AioCb 的包装。您可以使用类似于 nix 提供的构造函数创建一个。注册与任何 mio 类型相同,但 AioCb 必须单独注册。底层文件不会与 mio 注册。一旦注册,您可以使用包装 nix 类型的 readwrite 等方法发出 AioCb。在 miopoll 方法返回事件后,调用 AioCb::aio_return 以获取最终状态。此时,内核已忘记关于 AioCb 的信息。无需注销它(尽管注销不会造成伤害)。

平台

mio-aio 在 FreeBSD 上运行。它可能在 DragonflyBSD 上也能运行。它不适用于 Linux 或 MacOS。

不幸的是,Linux包含了一个对POSIX AIO的较差实现,它使用用户空间线程在glibc中模拟异步I/O。更糟糕的是,epoll(2)无法为POSIX AIO提供完成通知。这意味着它无法由mio-aio支持。但Linux用户仍然有希望!Linux有一个非标准的异步文件I/O API,称为libaio。Libaio的性能比Linux的POSIX AIO要好。然而,它仍然无法通过epoll(2)提供完成通知。它所能做的是通过eventfd(2)提供完成通知。而epoll可以轮询eventfd。因此,希望使用mio与文件进行交互的Linux程序员可以理论上编写一个mio-libaio crate,该crate使用一个eventfd来轮询所有的libaio操作。然后,他可以在mio之上实现一个可移植层,例如在tokio中。

在MacOS上,AIO只支持使用信号进行通知,而不是kqueue。在MacOS上,mio-aio理论上可以在一个单独的线程中运行aio-suspend,这将向主线程的reactor发送完成通知。然而,性能会受到影响。

许可证

mio-aio主要在MIT许可证和Apache许可证(版本2.0)的条款下分发。

有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。

依赖项

~2–12MB
~86K SLoC