9 unstable releases (4 breaking)
0.5.2 | Jul 6, 2024 |
---|---|
0.5.0 | Feb 21, 2024 |
0.2.1 | May 26, 2023 |
0.1.1 | Feb 21, 2023 |
#98 in Concurrency
70 downloads per month
Used in 2 crates
71KB
1K
SLoC
I/O reactor
Concurrent I/O without rust async problems
This repository provides a set of libraries for concurrent access to I/O
resources (file, network, devices etc) which uses reactor pattern with
pluggable poll
syscall engines. This allows to handle situations like
multiple network connections within the scope of a single thread (see
C10k problem).
The crate can be used for building concurrent microservice architectures
without polling all APIs with async
s.
The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated service[^1].
Core concepts:
- Resource: any resource that can provide input to or consume output from the system.
- Runtime: runs an event loop to block on all resources. Sends the resource service when it is possible to start a synchronous operation on a resource without blocking (Example: a synchronous call to read() will block if there is no data to read.
- Service: custom business logic provided by the application for a given set of resources. Service exposes a Handler API for the reactor runtime. It is also rsponsible for the creation and destruction of the resources.
Documentation
API reference documentation for the library can be accessed at https://docs.rs/io-reactor/.
Licensing
The libraries are distributed on the terms of Apache 2.0 opensource license. See LICENCE file for the license details.
[^1]: Schmidt, Douglas et al. Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects. Volume 2. Wiley, 2000.
Dependencies
~0.8–9.5MB
~103K SLoC