Norn is an experimental set of libraries for building single-threaded asynchronous runtimes.
Norn is designed for applications which meet two criteria:
- Fundementally I/O bound
- Trivially shardable or non-parallizable.
You probably should not. Norn is not a general purpose runtime. It's meant for very specific workloads (sharded I/O bound storage systems).
Norn is still in the early stages of development. The API is still in flux and in most cases non-existant.
- [
norn-task] is the core task system. It is mostly complete. I don't envision any substantial changes to the API. - [
norn-executor] is the single-threaded executor. It is not complete. The API is likely to change. - [
norn-channel] provides bounded cross-thread channels whose receive-side wakers remain local to a destination executor. - [
norn-nursery] provides scoped async concurrency on top ofnorn-task. It is inspired by moro. - [
norn-uring] is a uring-based backend for the executor. It is not complete and hardly useful. The API is very likely to change.
Much of the design of the task system and async submission handling was inspired by Tokio and tokio-uring. The general approach to handling tasks is very similar in that we use a single allocation per task, and track tasks in a linked list for easy shutdown.