Blame docs/src/threadpool.rst

Packit b5b901
Packit b5b901
.. _threadpool:
Packit b5b901
Packit b5b901
Thread pool work scheduling
Packit b5b901
===========================
Packit b5b901
Packit b5b901
libuv provides a threadpool which can be used to run user code and get notified
Packit b5b901
in the loop thread. This thread pool is internally used to run all file system
Packit b5b901
operations, as well as getaddrinfo and getnameinfo requests.
Packit b5b901
Packit b5b901
Its default size is 4, but it can be changed at startup time by setting the
Packit b5b901
``UV_THREADPOOL_SIZE`` environment variable to any value (the absolute maximum
Packit Service e08953
is 1024).
Packit Service e08953
Packit Service e08953
.. versionchanged:: 1.30.0 the maximum UV_THREADPOOL_SIZE allowed was increased from 128 to 1024.
Packit b5b901
Packit b5b901
The threadpool is global and shared across all event loops. When a particular
Packit b5b901
function makes use of the threadpool (i.e. when using :c:func:`uv_queue_work`)
Packit b5b901
libuv preallocates and initializes the maximum number of threads allowed by
Packit b5b901
``UV_THREADPOOL_SIZE``. This causes a relatively minor memory overhead
Packit b5b901
(~1MB for 128 threads) but increases the performance of threading at runtime.
Packit b5b901
Packit b5b901
.. note::
Packit b5b901
    Note that even though a global thread pool which is shared across all events
Packit b5b901
    loops is used, the functions are not thread safe.
Packit b5b901
Packit b5b901
Packit b5b901
Data types
Packit b5b901
----------
Packit b5b901
Packit b5b901
.. c:type:: uv_work_t
Packit b5b901
Packit b5b901
    Work request type.
Packit b5b901
Packit b5b901
.. c:type:: void (*uv_work_cb)(uv_work_t* req)
Packit b5b901
Packit b5b901
    Callback passed to :c:func:`uv_queue_work` which will be run on the thread
Packit b5b901
    pool.
Packit b5b901
Packit b5b901
.. c:type:: void (*uv_after_work_cb)(uv_work_t* req, int status)
Packit b5b901
Packit b5b901
    Callback passed to :c:func:`uv_queue_work` which will be called on the loop
Packit b5b901
    thread after the work on the threadpool has been completed. If the work
Packit b5b901
    was cancelled using :c:func:`uv_cancel` `status` will be ``UV_ECANCELED``.
Packit b5b901
Packit b5b901
Packit b5b901
Public members
Packit b5b901
^^^^^^^^^^^^^^
Packit b5b901
Packit b5b901
.. c:member:: uv_loop_t* uv_work_t.loop
Packit b5b901
Packit b5b901
    Loop that started this request and where completion will be reported.
Packit b5b901
    Readonly.
Packit b5b901
Packit b5b901
.. seealso:: The :c:type:`uv_req_t` members also apply.
Packit b5b901
Packit b5b901
Packit b5b901
API
Packit b5b901
---
Packit b5b901
Packit b5b901
.. c:function:: int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
Packit b5b901
Packit b5b901
    Initializes a work request which will run the given `work_cb` in a thread
Packit b5b901
    from the threadpool. Once `work_cb` is completed, `after_work_cb` will be
Packit b5b901
    called on the loop thread.
Packit b5b901
Packit b5b901
    This request can be cancelled with :c:func:`uv_cancel`.
Packit b5b901
Packit b5b901
.. seealso:: The :c:type:`uv_req_t` API functions also apply.