mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-17 08:06:43 -05:00
2 lines
11 KiB
HTML
2 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Moonpool (moonpool.Moonpool)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">moonpool</a> » Moonpool</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool</span></code></h1><p>Moonpool</p><p>A pool within a bigger pool (ie the ocean). Here, we're talking about pools of <code>Thread.t</code> that are dispatched over several <code>Domain.t</code> to enable parallelism.</p><p>We provide several implementations of pools with distinct scheduling strategies, alongside some concurrency primitives such as guarding locks (<a href="Lock/index.html#type-t"><code>Lock.t</code></a>) and futures (<a href="Fut/index.html#type-t"><code>Fut.t</code></a>).</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec module anchored" id="module-Ws_pool"><a href="#module-Ws_pool" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Ws_pool/index.html">Ws_pool</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Work-stealing thread pool.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Fifo_pool"><a href="#module-Fifo_pool" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Fifo_pool/index.html">Fifo_pool</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A simple thread pool in FIFO order.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Runner"><a href="#module-Runner" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Runner/index.html">Runner</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Interface for runners.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Immediate_runner"><a href="#module-Immediate_runner" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Immediate_runner/index.html">Immediate_runner</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Runner that runs tasks immediately in the caller thread.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Pool"><a href="#module-Pool" class="anchor"></a><code><span><span class="keyword">module</span> Pool</span><span> = <a href="Fifo_pool/index.html">Fifo_pool</a></span></code></div><div class="spec-doc"><p>Default pool. Please explicitly pick an implementation instead.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-start_thread_on_some_domain"><a href="#val-start_thread_on_some_domain" class="anchor"></a><code><span><span class="keyword">val</span> start_thread_on_some_domain : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <a href="../../ocaml/Thread/index.html#type-t">Thread.t</a></span></code></div><div class="spec-doc"><p>Similar to <a href="../../ocaml/Thread/index.html#val-create"><code>Thread.create</code></a>, but it picks a background domain at random to run the thread. This ensures that we don't always pick the same domain to run all the various threads needed in an application (timers, event loops, etc.)</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-run_async"><a href="#val-run_async" class="anchor"></a><code><span><span class="keyword">val</span> run_async : <span><span class="optlabel">?name</span>:string <span class="arrow">-></span></span> <span><a href="Runner/index.html#type-t">Runner.t</a> <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>run_async runner task</code> schedules the task to run on the given runner. This means <code>task()</code> will be executed at some point in the future, possibly in another thread.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">name</span> <p>if provided and <code>Trace</code> is present in dependencies, a span will be created when the task starts, and will stop when the task is over. (since NEXT_RELEASE)</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-recommended_thread_count"><a href="#val-recommended_thread_count" class="anchor"></a><code><span><span class="keyword">val</span> recommended_thread_count : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Number of threads recommended to saturate the CPU. For IO pools this makes little sense (you might want more threads than this because many of them will be blocked most of the time).</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn"><a href="#val-spawn" class="anchor"></a><code><span><span class="keyword">val</span> spawn : <span><span class="optlabel">?name</span>:string <span class="arrow">-></span></span> <span><span class="label">on</span>:<a href="Runner/index.html#type-t">Runner.t</a> <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="Fut/index.html#type-t">Fut.t</a></span></span></code></div><div class="spec-doc"><p><code>spawn ~on f</code> runs <code>f()</code> on the runner (a thread pool typically) and returns a future result for it. See <a href="Fut/index.html#val-spawn"><code>Fut.spawn</code></a>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">name</span> <p>if provided and <code>Trace</code> is present in dependencies, a span will be created for the future. (since 0.6)</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn_on_current_runner"><a href="#val-spawn_on_current_runner" class="anchor"></a><code><span><span class="keyword">val</span> spawn_on_current_runner : <span><span class="optlabel">?name</span>:string <span class="arrow">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="Fut/index.html#type-t">Fut.t</a></span></span></code></div><div class="spec-doc"><p>See <a href="Fut/index.html#val-spawn_on_current_runner"><code>Fut.spawn_on_current_runner</code></a>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">name</span> <p>see <a href="#val-spawn"><code>spawn</code></a>. since 0.6.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-await"><a href="#val-await" class="anchor"></a><code><span><span class="keyword">val</span> await : <span><span><span class="type-var">'a</span> <a href="Fut/index.html#type-t">Fut.t</a></span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Await a future. See <a href="Fut/index.html#await"><code>await</code></a>. Only on OCaml >= 5.0.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Lock"><a href="#module-Lock" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Lock/index.html">Lock</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Mutex-protected resource.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Fut"><a href="#module-Fut" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Fut/index.html">Fut</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Futures.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Chan"><a href="#module-Chan" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Chan/index.html">Chan</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Channels.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Fork_join"><a href="#module-Fork_join" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Fork_join/index.html">Fork_join</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Fork-join primitives.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Thread_local_storage"><a href="#module-Thread_local_storage" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Thread_local_storage/index.html">Thread_local_storage</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Thread local storage</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Blocking_queue"><a href="#module-Blocking_queue" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Blocking_queue/index.html">Blocking_queue</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A simple blocking queue.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Bounded_queue"><a href="#module-Bounded_queue" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Bounded_queue/index.html">Bounded_queue</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A blocking queue of finite size.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Atomic"><a href="#module-Atomic" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Atomic/index.html">Atomic</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Atomic values.</p></div></div></div></body></html>
|