domainslib
provides control and data structure for parallel programming using
domains.
The supported data structures are:
- Channels
- Channels may be shared between multiple senders and receivers.
- Channels come in two flavours -- bounded (fixed-buffer size (>= 0) beyond which the send blocks) and unbounded.
- Task
- Work-stealing task pool with async/await parallelism and parallel for loop.
See examples for usage.
The library can be installed using
multicore-opam
, an OPAM
repository of multicore specific packages.
$ opam update
$ opam switch create 4.12.0+domains+effects --packages=ocaml-variants.4.12.0+domains+effects --repositories=multicore=git+https://github.com/ocaml-multicore/multicore-opam.git,default
$ opam install dune domainslib
If you are interested in hacking on the implementation, then opam pin
this
repository:
First install the multicore compiler and dune:
$ opam update
$ opam switch create 4.12.0+domains+effects --packages=ocaml-variants.4.12.0+domains+effects --repositories=multicore=git+https://github.com/ocaml-multicore/multicore-opam.git,default
$ opam switch 4.12.0+domains+effects
$ opam install dune
Then, pin a clone of this repo:
$ git clone https://github.com/ocaml-multicore/domainslib
$ cd domainslib
$ opam pin add domainslib file://`pwd`