/io-reactor

Rust implementation of reactor pattern for I/O resources

Primary LanguageRustApache License 2.0Apache-2.0

I/O reactor

Build Tests Lints codecov

crates.io Docs Apache-2 licensed

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 asyncs.

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 service1.

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.

Footnotes

  1. Schmidt, Douglas et al. Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects. Volume 2. Wiley, 2000.