3个版本
使用旧的Rust 2015
0.1.2 | 2018年3月8日 |
---|---|
0.1.1 | 2018年2月24日 |
0.1.0 | 2018年2月14日 |
#7 in #aio
在 tokio-linux-aio 中使用
3KB
tokio-linux-aio
本软件包将Linux内核级别的异步I/O集成到Tokio平台。
Linux内核级别的异步I/O与Posix AIO库不同。Posix AIO使用用户空间线程池实现,通过调用常规的阻塞系统调用来执行文件I/O。另一方面,Linux内核级别的AIO为底层块设备提供内核级别的异步I/O调度。
注意:实现和测试开发仍在进行中。在为这个crate进行下一版本之前,我正在等待tokio 0.2稳定。在此期间,我正在开发一个SQL语言子集的前端实现,名为vervolg。总体目标是构建一个数据库内核的测试床和实验平台。
用法
将以下内容添加到您的 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许可证。
无运行时依赖
~0–1.7MB
~35K SLoC