diff options
| author | Loris Cro <kappaloris@gmail.com> | 2025-11-04 21:11:40 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-11-21 19:54:41 -0800 |
| commit | 8eaebf5939491b005e392698ec6e890ebaf0f86b (patch) | |
| tree | 0b4d293734202a30cff6be585149402e4bea1abf /lib/std/Thread/WaitGroup.zig | |
| parent | d54fbc01234688b37a48b29fee499529a500ccf5 (diff) | |
| download | zig-8eaebf5939491b005e392698ec6e890ebaf0f86b.tar.gz zig-8eaebf5939491b005e392698ec6e890ebaf0f86b.zip | |
Io.Threaded PoC reimplementation
This is a reimplementation of Io.Threaded that fixes the issues
highlighted in the recent Zulip discussion. It's poorly tested but it
does successfully run to completion the litmust test example that I
offered in the discussion.
This implementation has the following key design decisions:
- `t.cpu_count` is used as the threadpool size.
- `t.concurrency_limit` is used as the maximum number of
"burst, one-shot" threads that can be spawned by `io.concurrent` past
`t.cpu_count`.
- `t.available_thread_count` is the number of threads in the pool that
is not currently busy with work (the bookkeeping happens in the worker
function).
- `t.one_shot_thread_count` is the number of active threads that were
spawned by `io.concurrent` past `t.cpu_count`.
In this implementation:
- `io.async` first tries to decrement `t.available_thread_count`. If
there are no threads available, it tries to spawn a new one if possible,
otherwise it runs the task immediately.
- `io.concurrent` first tries to use a thread in the pool same as
`io.async`, but on failure (no available threads and pool size limit
reached) it tries to spawn a new one-shot thread. One shot threads
run a different main function that just executes one task, decrements
the number of active one shot threads, and then exits.
A relevant future improvement is to have one-shot threads stay on for a
few seconds (and potentially pick up a new task) to amortize spawning
costs.
Diffstat (limited to 'lib/std/Thread/WaitGroup.zig')
0 files changed, 0 insertions, 0 deletions
