mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-19 09:06:43 -05:00
2 lines
13 KiB
HTML
2 lines
13 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-Background_thread"><a href="#module-Background_thread" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Background_thread/index.html">Background_thread</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A simple runner with a single background thread.</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 in the caller thread.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Exn_bt"><a href="#module-Exn_bt" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Exn_bt/index.html">Exn_bt</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Exception with backtrace.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Shutdown"><a href="#exception-Shutdown" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Shutdown</span></span></code></div><div class="spec-doc"><p>Exception raised when trying to run tasks on runners that have been shut down.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> NEXT_RELEASE</li></ul></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">?ls</span>:<a href="Task_local_storage/index.html#type-t">Task_local_storage.t</a> <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="since"><span class="at-tag">since</span> 0.5</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-run_wait_block"><a href="#val-run_wait_block" class="anchor"></a><code><span><span class="keyword">val</span> run_wait_block : <span><span class="optlabel">?ls</span>:<a href="Task_local_storage/index.html#type-t">Task_local_storage.t</a> <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> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>run_wait_block runner f</code> schedules <code>f</code> for later execution on the runner, like <a href="#val-run_async"><code>run_async</code></a>. It then blocks the current thread until <code>f()</code> is done executing, and returns its result. If <code>f()</code> raises an exception, then <code>run_wait_block pool f</code> will raise it as well.</p><p><b>NOTE</b> be careful with deadlocks (see notes in <a href="Fut/index.html#val-wait_block"><code>Fut.wait_block</code></a> about the required discipline to avoid deadlocks).</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Shutdown"><code>Shutdown</code></a> <p>if the runner was already shut down</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> NEXT_RELEASE</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="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="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>(<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="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-Task_local_storage"><a href="#module-Task_local_storage" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Task_local_storage/index.html">Task_local_storage</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Task-local storage.</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> Thread_local_storage</span><span> = <a href="../Moonpool_private/Thread_local_storage_/index.html">Moonpool_private.Thread_local_storage_</a></span></code></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> Atomic</span><span> = <a href="../Moonpool_private/Atomic_/index.html">Moonpool_private.Atomic_</a></span></code></div><div class="spec-doc"><p>Atomic values.</p></div></div></div></body></html>
|