An open API service indexing awesome lists of open source software.

https://github.com/vertexclique/nuclei

Proactive IO & Runtime system
https://github.com/vertexclique/nuclei

async epoll io iocp iouring kqueue lock-free proactor runtime rust-lang zero-cost-abstraction

Last synced: 2 days ago
JSON representation

Proactive IO & Runtime system

Awesome Lists containing this project

README

        






Nuclei: Proactive IO & Runtime system






Build Status



Crates.io



Crates.io



Download



docs.rs docs





Nuclei is a [proactor-based](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.49.9183) IO system which is runtime agnostic and can work with any runtime.
The proactor system's design principles are matching [Boost Asio](https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/async.html).
Nuclei is not using a conventional reactor approach. It is completely asynchronous, and it's wrapping poll based IO in a proactive fashion.

Nuclei uses [io_uring](https://kernel.dk/io_uring.pdf) on Linux as the primary IO backend, secondarily you can use [epoll](https://en.wikipedia.org/wiki/Epoll). On MacOS, Nuclei is using [kqueue](https://en.wikipedia.org/wiki/Kqueue).
On Windows, the [IOCP](https://en.wikipedia.org/wiki/Input/output_completion_port) backend [will be used](https://github.com/vertexclique/nuclei/pull/3).

The current io_uring implementation needs a modern Linux kernel (5.19+).

## Features

* Most of the recent IO_URING features are available, ZC and other 6.1+ features are in TODO.
* Async TCP, UDP, Unix domain sockets and files...
* The proactor system doesn't block
* Scatter/Gather operations
* Minimal allocation
* More expressive than any other runtime
* Completely asynchronous I/O system with lock free programming

## Examples
Please head to `examples` directory to run the examples:
```shell script
$ cd examples
$ cargo run --example fread-vect
```

## Tests

```shell script
$ cargo test --no-default-features --features=iouring # For iouring
$ cargo test # For others
```

## Configurations

### Evented IO backend

When the `iouring` feature gate is not enabled, the platforms evented backend is used. For example, on Linux, `epoll` would be used.

### Executor

Executor is using `async-global-executor`. Available features are:
* `async-exec`: Uses `async-io` feature of `async-global-executor`.
* `tokio`

#### License


Licensed under either of Apache License, Version
2.0
or MIT license at your option.



Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.

##### Credits

Gif is from the documentary called "Particle Fever".