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 中使用

MIT 许可证

3KB

tokio-linux-aio

Version License Docs Build Status Join the chat at https://gitter.im/tokio-linux-aio/Lobby

本软件包将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