A Rust library implementing safe, lightweight context switches, without relying on kernel services
Go to file
edef 1653e7ba5e Add x86 benchmark results to README 2015-04-16 13:17:37 -04:00
.travis/docs refine the Travis CI setup 2015-04-16 11:38:30 -04:00
benches x86 support 2015-04-16 13:15:46 -04:00
examples big rename — we're libfringe now 2015-04-16 08:11:12 -04:00
src x86 support 2015-04-16 13:15:46 -04:00
.editorconfig add .editorconfig 2015-04-16 04:17:55 -04:00
.gitignore initial commit 2014-12-23 04:27:28 +01:00
.travis.yml refine the Travis CI setup 2015-04-16 11:38:30 -04:00
Cargo.toml big rename — we're libfringe now 2015-04-16 08:11:12 -04:00
LICENSE big rename — we're libfringe now 2015-04-16 08:11:12 -04:00
README.md Add x86 benchmark results to README 2015-04-16 13:17:37 -04:00
build.rs big rename — we're libfringe now 2015-04-16 08:11:12 -04:00

README.md

travis rustdoc

libfringe

libfringe is a low-level green threading library for Rust. It's usable in freestanding environments (like kernels), but it can also provide an easy-to-use stack allocator using your operating system's memory mapping facility.

Performance

libfringe does context switches in 3.5ns flat on x86_64!

test swap ... bench:         7 ns/iter (+/- 0)

…and on x86, a mere 2.5ns!

test swap ... bench:         5 ns/iter (+/- 1)

Limitations

libfringe currently doesn't work on anything but 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 several 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.

os

Built-in stack allocator using your your operating system's anonymous memory mapping facility. Currently only available for Unix.