A simple, rule-based scheduler for OCaml 5 enabling concurrent and parallel task development with a focus on composability.
Miou is a simple scheduler library for OCaml 5 that facilitates the development of applications requiring concurrent and parallel task execution. It provides a rule-based framework to guide developers toward best practices, helping avoid common anti-patterns in system programming. The library is designed to be lightweight and composable, making it suitable for constrained environments like unikernels.
OCaml developers building system-level applications, unikernels, or services that need reliable concurrency and parallelism with strict control over task management and resource handling.
Developers choose Miou for its conservative, rule-driven design that enforces good practices, its separation of core scheduling from I/O suspension for flexibility, and its focus on composability in limited environments. It offers a predictable and stable alternative to more complex schedulers.
A simple scheduler for OCaml 5
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Enforces structured task management, such as requiring parents to wait for all children, which prevents anti-patterns and technical debt as explicitly stated in the README's rules section.
Offers both concurrency via Miou.async for same-domain tasks and parallelism via Miou.call across domains, providing versatility for different execution needs in OCaml 5.
Separates core scheduling from I/O suspension, allowing users to handle system-specific resources through extensions like miou.unix, enhancing composability for constrained environments like unikernels.
Randomly picks tasks for execution to improve code coverage and reduce predictability for security, a feature detailed in the README that helps in testing and robustness.
Only permits value transmission between parent and child tasks, limiting flexibility for complex communication patterns and requiring additional synchronization mechanisms like mutexes for other interactions.
Delegates suspension management to users, forcing them to implement I/O handling themselves or rely on extensions, which increases setup complexity compared to libraries with built-in I/O support.
Has a smaller community and fewer third-party extensions than established OCaml concurrency libraries, potentially limiting tooling and support for broader application development.