package moonpool
Pools of threads supported by a pool of domains
Install
Dune Dependency
Authors
Maintainers
Sources
moonpool-0.5.tbz
sha256=bd1ab7a02532bc515fa43b6ed3ef7e206d318bd393a4256ed9084255c364ac86
sha512=4385fb57dde586b229b00c28c00c23b140ac41d8300c5b5f6fc812167d29b277c0c22a41c35d697bcb3ecefd20b1cbb22c115d4586e6421808469efa8f9bf6c3
doc/CHANGES.html
0.5
features
- add
Bb_queue.transfer
-addBb_queue.to_{iter,gen,seq}
- add
Fifo_pool
, a simple pool with a single blocking queue for workloads with coarse granularity tasks that value latency (e.g. a web server) - add a work-stealing pool for heavy compute workloads that feature a lot of await/fork-join, with a lot of help from Vesa Karvonen (@polytypic)
- add
Fut.spawn_on_current_runner
- add
Runner.{spawn_on_current_runner, await}
- add a few more toplevel aliases in
Moonpool
itself - add
No_runner
: a runner that runs tasks synchronously in the caller - on shutdown, pools will finish running all present tasks before closing. New tasks are immediately rejected.
- use an optional dependency on
thread-local-storage
to implement work stealing andspawn_on_current_runner
optimizations
- use the main domain to spawn threads on it. This means we can really use all cores, not all but one.
- in
Fork_join.both
, only one of the two sides schedules a task, the other runs in the current thread. This reduces scheduling overhead. - compare to domainslib in benchmarks. With the WS pool we're now slightly ahead in terms of overhead on the recursive fib benchmark.
breaking
- deprecate
Pool
, now an alias toFifo_pool
0.4
- add
Fut.{reify_error,bind_reify_error}
- full lifecycle for worker domains, where a domain will shutdown if no thread runs on it, after a short delay.
- fix: generalize type of
create_arg
- perf: in
Bb_queue
, only signal condition on push if queue was empty
0.3
- add
Fork_join
for parallelizing computations. This is only available on OCaml 5.x because it relies on effects. - add
Fork_join.{for_,map_array,map_list}
- add
Fork_join.all_{list,init}
- add
Pool.with_
- add a channel module
- add
Runner
, changePool
to produce aRunner.t
- add a
Lock
module - add support for domain-local-await when installed
- add
Fut.await
for OCaml >= 5.0 - fix: Fork_join.both_ignore now has a more general type
- expose
Suspend_
and its internal effect with an unstability alert. This is intended for implementors ofRunner
only. - port
cpp.ml
from containers, replace previous codegen with it. This will provide better flexibility for supporting multiple versions of OCaml in the future. - add
Pool.run_wait_block
; renamePool.run
intoPool.run_async
- fix: in blocking queue,
pop
works on a non empty closed queue
0.2
- add
Fut.for_list
- add
around_task
toPool.create
- add
Pool.shutdown_without_waiting
- add
Pool.num_tasks
- add
Fut.is_done
- add
Blocking_queue.size
- add
Fut.for_array
to easily iterate on an array in parallel - add
Fut.get_or_fail{,_exn}
- perf: limit number of work queues in pool
- perf: use multiple queues and non-blocking work-stealing from them, in pool this improves the behavior for many small tasks by reducing contention on each queue
- fix: fut: actually run all map/bind callbacks in pool if provided
0.1.1
- fix(fut): fix bug when calling
wait_list []
- fix: join_array on arrays of length=1 had a bound error
0.1
initial release