You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

38 lines
2.3 KiB

<h1 id="threading">Threading</h1>
<p>Duktape supports a limited form of multithreading:</p>
<ul>
<li>A particular Duktape heap created with <code>duk_create_heap()</code> is
single threaded: only one native thread can execute code in the heap at a
time. The native thread can change over time, as long as two native threads
are not active at the same time in the same Duktape heap.</li>
<li>It is possible to suspend Duktape execution in a Duktape/C call using
<code><a href="api.html#duk_suspend">duk_suspend()</a></code> and later
resume it with <code><a href="api.html#duk_resume">duk_resume()</a></code>.
Between these calls another thread may call into the same Duktape heap.
Application code must manage any locking necessary to ensure only one
native thread calls into Duktape at a time.</li>
<li>Duktape heaps are completely isolated from each other. Multiple native
threads can execute code at the same time, as long as there is only one
active native thread per Duktape heap.</li>
<li>The <code><a href="api.html#duk_suspend">duk_suspend()</a></code> and
<code><a href="api.html#duk_resume">duk_resume()</a></code> API calls
(introduced in Duktape 1.6.0) allow a native thread to suspend while
another native thread executes calls into a Duktape heap.</li>
</ul>
<p>For some background, a Duktape heap is a single memory management region
regardless of how many Duktape threads exist in the heap (don't confuse native
threads and Duktape threads). Because the Duktape threads in a heap can share
object references, multithreading support would need synchronization for garbage
collection and all object handling. Synchronization would be a major
portability issue, so a practical approach is to limit a Duktape heap to be
single threaded. Duktape heaps don't share anything so there are no threading
limitations between them as a general rule. However, when some platform features
are not available (such as variadic preprocessor macros or re-entrant system calls)
there are some limitations.</p>
<p>See
<a href="https://github.com/svaarala/duktape/blob/master/doc/threading.rst">threading.rst</a>
and <a href="http://wiki.duktape.org/HowtoMultipleNativeThreads.html">How to use multiple native threads</a>
for a detailed discussion of threading limitations and best practices.</p>