# Compio
[](https://github.com/Berrysoft/compio/blob/master/LICENSE)
[](https://crates.io/crates/compio)
[](https://docs.rs/compio)
[](https://strawberry-vs.visualstudio.com/compio/_build)
A thread-per-core Rust runtime with IOCP/io_uring/polling.
The name comes from "completion-based IO".
This crate is inspired by [monoio](https://github.com/bytedance/monoio/).
## Why not Tokio?
Tokio is a great generic-propose async runtime.
However, it is poll-based, and even uses [undocumented APIs](https://notgull.net/device-afd/) 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.
## Why not monoio/tokio-uring?
They don't support Windows.
## Quick start
Add `compio` as dependency:
```
compio = { version = "0.8.0", features = ["macros"] }
```
Then we can use high level APIs to perform filesystem & net IO.
```rust
use compio::fs::File;
#[compio::main]
async fn main() {
let file = File::open("Cargo.toml").unwrap();
let (read, buffer) = file.read_to_end_at(Vec::with_capacity(1024), 0).await.unwrap();
assert_eq!(read, buffer.len());
let buffer = String::from_utf8(buffer).unwrap();
println!("{}", buffer);
}
```
You can also control the low-level driver manually. See `driver` example of the repo.