Crate compio

source ·
Expand description

Compio

A thread-per-core Rust runtime with IOCP/io_uring. The name comes from “completion-based IO”. This crate is inspired by monoio.

Why not Tokio?

Tokio is a great generic-propose async runtime. However, it is poll-based, and even uses undocumented APIs on Windows. We would like some new high-level APIs to perform IOCP/io_uring.

Unlike tokio-uring, this runtime isn’t Tokio-based. This is mainly because that no public APIs to control IOCP in mio, and tokio won’t public APIs to control mio before mio reaches 1.0.

Quick start

let buffer = compio::task::block_on(async {
    let file = compio::fs::OpenOptions::new().read(true).open("Cargo.toml").unwrap();
    let (read, buffer) = file.read_at(Vec::with_capacity(1024), 0).await;
    let read = read.unwrap();
    assert_eq!(read, buffer.len());
    String::from_utf8(buffer).unwrap()
});
println!("{}", buffer);

Modules

  • Utilities for working with buffers.
  • The platform-specified driver. Some types differ by compilation target.
  • Filesystem manipulation operations.
  • Network related.
  • The async operations. Types in this mod represents the low-level operations passed to kernel. The operation itself doesn’t perform anything. You need to pass them to crate::driver::Driver, and poll the driver.
  • Asynchronous signal handling.
  • The runtime of compio. We don’t expose the runtime struct because there could be only one runtime in each thread.
  • Utilities for tracking time.

Type Aliases

  • A specialized Result type for operations with buffers.