12 个版本
使用旧的 Rust 2015
0.1.11 | 2018 年 8 月 30 日 |
---|---|
0.1.10 | 2018 年 8 月 15 日 |
0.1.9 | 2018 年 3 月 8 日 |
0.1.2 | 2018 年 2 月 24 日 |
#636 in Unix API
56 monthly downloads
68KB
1K SLoC
tokio-linux-aio
此包将 Linux 内核级别的异步 I/O 集成到 Tokio 平台。
Linux 内核级别的异步 I/O 与 Posix AIO 库 不同。Posix AIO 是通过用户空间线程池实现的,它调用常规的阻塞系统调用来执行文件 I/O。另一方面,Linux 内核级别的 AIO 提供了对底层块设备的 I/O 操作的内核级异步调度。
注意:实现和测试开发仍在进行中。在对此 crate 进行下一版本修订之前,我正在等待 tokio 0.2 稳定。在此期间,我正在开发 vervolg,它是 SQL 语言子集的前端实现。总的来说,我的目标是构建一个数据库内核的测试平台和实验平台。
用法
将此添加到您的 Cargo.toml
[dependencies]
tokio-linux-aio = "0.1"
然后,将此添加到 crate 的根模块中
extern crate tokio_linux_aio;
示例
一旦您将 crate 添加到项目中,您应该能够编写类似以下内容
// Let's use a standard thread pool
let pool = futures_cpupool::CpuPool::new(5);
// These are handle objects for memory regions
let buffer = MemoryHandle::new();
{
// Here we go: create an execution context, which uses the pool for background work
let context = AioContext::new(&pool, 10).unwrap();
// Create a future to read from a given file (fd) at the given offset into our buffer
let read_future = context
.read(fd, 0, buffer)
.map(move |result_buffer| {
// do something upon successfully reading the data
assert!(validate_block(result_buffer.as_ref()));
})
.map_err(|err| {
// do something else when things go wrong
panic!("{:?}", err);
});
// Execute the future and wait for its completion
let cpu_future = pool.spawn(read_future);
let result = cpu_future.wait();
// Should be OK
assert!(result.is_ok());
}
许可证
此代码受 MIT 许可证 保护。
依赖项
~4.5–6.5MB
~105K SLoC