3个不稳定版本
0.3.0 | 2020年4月27日 |
---|---|
0.2.1 | 2020年4月16日 |
0.2.0 | 2020年4月16日 |
0.1.1 |
|
0.1.0 |
|
在 Unix API 中排名 779
60KB
1.5K SLoC
linux-aio-tokio
此包提供Linux内核级异步I/O到Tokio平台的集成。
Linux内核级异步I/O与POSIX AIO库不同。POSIX AIO使用用户空间线程池实现,这些线程调用常规的阻塞系统调用来执行文件I/O。另一方面,Linux内核级AIO为底层块设备提供了内核级异步I/O调度。
使用方法
将以下内容添加到您的Cargo.toml
[dependencies]
linux-aio-tokio = "0.3"
示例
use std::fs::OpenOptions;
use tempfile::tempdir;
use linux_aio_tokio::{aio_context, AioOpenOptionsExt, LockedBuf, ReadFlags, WriteFlags};
#[tokio::main]
async fn main() {
let (aio, aio_handle) = aio_context(8, true).unwrap();
let dir = tempdir().unwrap();
let mut open_options = OpenOptions::new();
open_options
.read(true)
.create_new(true)
.append(true)
.write(true);
let file = open_options
.aio_open(dir.path().join("tmp"), false)
.await
.unwrap();
let mut write_buf = LockedBuf::with_size(1024).unwrap();
for i in 0..write_buf.size() {
write_buf.as_mut()[i] = (i % 0xff) as u8;
}
file.write_at(&aio_handle, 0, &write_buf, 1024, WriteFlags::APPEND)
.await
.unwrap();
let mut read_buf = LockedBuf::with_size(1024).unwrap();
file.read_at(&aio_handle, 0, &mut read_buf, 1024, ReadFlags::empty())
.await
.unwrap();
assert_eq!(read_buf.as_ref(), write_buf.as_ref());
aio.close().await;
println!("all good!");
}
许可证
此代码遵循MIT许可证。
致谢
当前实现基于由Hans-Martin Will创建的代码,可在GitHub仓库找到。
依赖
~6–9MB
~157K SLoC