40fbfdde0c
That was a silly idea for a silly abstraction, and it brought no improvement, only confusion. So, revert it. |
||
---|---|---|
.travis/docs | ||
benches | ||
src | ||
tests | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
Cargo.toml | ||
LICENSE | ||
README.md |
README.md
libfringe
libfringe is a library implementing lightweight context switches,
without relying on kernel services. It can be used in hosted environments
(using std
) as well as on bare metal (using core
).
It provides high-level, safe abstractions:
- an implementation of internal iterators, also known as generators, Generator.
It also provides low-level, very unsafe building blocks:
- a flexible, low-level context-swapping mechanism, Context;
- a trait that can be implemented by stack allocators, Stack;
- a stack allocator based on anonymous memory mappings with guard pages, OsStack.
Performance
libfringe does context switches in 2.5ns flat on x86_64!
test swap ... bench: 5 ns/iter (+/- 1)
…and on x86:
test swap ... bench: 5 ns/iter (+/- 1)
Limitations
libfringe currently doesn't work on anything but x86 and x86_64, and is untested on anything but Linux.
Installation
libfringe is a Cargo package.
It's not stable software yet, so you'll have to use it as a git dependency.
Add this to your Cargo.toml
:
[dependencies.fringe]
git = "https://github.com/edef1c/libfringe.git"
Feature flags
libfringe provides some optional features through Cargo's feature flags. Currently, all of them are enabled by default.
valgrind
Valgrind integration. libfringe will register context stacks with Valgrind.