Loris Cro
c199124a84
fix logic bug in groupAsync
2025-11-07 13:33:45 +01:00
Loris Cro
b80e43903f
fix single-threaded builds
2025-11-07 12:43:25 +01:00
Loris Cro
0156d68f0c
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.
2025-11-07 12:43:25 +01:00
snoire
ffb0050d81
std.Io.Writer.print: support .enum_literal in 't' format specifier
2025-11-06 13:45:21 +08:00
Jacob Young
ea76946d2a
Io.Queue: fix empty and full states being indistinguishable.
2025-11-04 04:24:32 -05:00
Linus Groh
afdd04356c
std: serenity has preadv now
...
2a9154e77c
2025-11-02 14:45:32 -08:00
Alex Rønne Petersen
5db9eaa851
std.Io.Threaded: use ResetEventPosix on illumos
...
Like NetBSD, illumos has no futexes.
ref #25760
2025-11-01 16:18:56 +01:00
Jacob Young
5b060ef9d4
Merge pull request #25558 from jacobly0/elfv2-load-obj
...
Elf2: start implementing input object loading
2025-10-30 12:09:13 -04:00
John Benediktsson
74c23a237e
Merge pull request #25763 from mrjbq7/cancelled
...
rename Cancelled to Canceled
2025-10-30 04:40:13 +00:00
Jacob Young
1d80c9540a
Threaded: fix safety crashes
2025-10-29 21:01:47 -04:00
Jacob Young
c4478e078b
Elf2: load archives
2025-10-29 18:07:12 -04:00
Andrew Kelley
e8e1e2793a
std.Io: make select unit test not depend on cancellation
2025-10-29 06:26:05 -07:00
Andrew Kelley
05b28409e7
std.Io.Threaded: install and cleanup signal handlers
...
rather than in start code. delete std.options.keep_sig_io and
std.options.keep_sig_pipe
2025-10-29 06:20:52 -07:00
Andrew Kelley
b863f2548b
std.Io.Threaded: handle -fsingle-threaded in unit tests
2025-10-29 06:20:52 -07:00
Andrew Kelley
a45cafb7f0
std.Io: add unit test for select
2025-10-29 06:20:52 -07:00
Andrew Kelley
c40204a3e5
std.Io: add unit tests for Group and concurrent
2025-10-29 06:20:52 -07:00
Andrew Kelley
03fd132b1c
std.Io: fix Group.wait unsoundness
...
Previously if a Group.wait was canceled, then a subsequent call to
wait() or cancel() would trip an assertion in the synchronization code.
2025-10-29 06:20:52 -07:00
Andrew Kelley
6c794ce7bc
std.Io.Threaded.dirOpenFileWtf16: SHARING_VIOLATION
...
is the error code that needs the kernel bug workaround, not
ACCESS_DENIED.
2025-10-29 06:20:52 -07:00
Andrew Kelley
6f64c8b693
std.debug.SelfInfo.Windows: less invasive change
...
restores code closer to master branch in hopes of avoiding a regression
that was introduced when this was based on openSelfExe rather than
GetModuleFileNameExW.
2025-10-29 06:20:52 -07:00
Andrew Kelley
030b630829
std.Io.Threaded: fix EBADF error code on wasm32-wasi -lc when reading
2025-10-29 06:20:52 -07:00
Andrew Kelley
c4dc7d7c3d
std.Io.Threaded: implement Unix sockets for Windows
2025-10-29 06:20:52 -07:00
Andrew Kelley
b39f3d294d
std.Io.Threaded: implement dirMakeOpenPath for WASI
...
and fix error code when file operation occurs on director handle
2025-10-29 06:20:52 -07:00
Andrew Kelley
4114392369
std: fix definition of ws2_32.GetAddrInfoExW
...
There was a missing parameter.
2025-10-29 06:20:52 -07:00
Andrew Kelley
f5870b267e
std.Io.Threaded: fix typo in panic message
2025-10-29 06:20:52 -07:00
Andrew Kelley
94b9874981
std.Io.Threaded: stub out netbsd mutex and condition
2025-10-29 06:20:52 -07:00
Andrew Kelley
a28d3059e6
std.Io.Threaded: implement ResetEvent in terms of pthreads
...
needed for NetBSD
2025-10-29 06:20:52 -07:00
Andrew Kelley
30448d92af
std.Io.Threaded: fix netLookup for Windows
...
* respect address family option
* fix port number using wrong buffer
2025-10-29 06:20:52 -07:00
Andrew Kelley
135ec79f50
std.Io.File: fix stat for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
cc4931b325
std.Io.Threaded: fix 32-bit overflow in lookupDns
...
be a little more careful with nanoseconds
2025-10-29 06:20:51 -07:00
Andrew Kelley
3de1b6c9a9
std.Io.Threaded: better clock lowering for BSDs
2025-10-29 06:20:51 -07:00
Andrew Kelley
8b269f7e18
std: make signal numbers into an enum
...
fixes start logic for checking whether IO/POLL exist
2025-10-29 06:20:51 -07:00
Andrew Kelley
cc751c01f1
std.Io.Threaded: correct clockToPosix for FreeBSD
2025-10-29 06:20:51 -07:00
Andrew Kelley
4e95c2eb1b
std.Io.Threaded: implement futexes for freebsd
2025-10-29 06:20:51 -07:00
Andrew Kelley
0caf286a1a
std.Io.Threaded: don't skip executing canceled group closures
2025-10-29 06:20:51 -07:00
Andrew Kelley
df4c30ca16
link: move the windows kernel bug workaround to Io implementation
2025-10-29 06:20:51 -07:00
Andrew Kelley
6ccb53bff1
std.Io.Threaded: fix openSelfExe for Windows
...
missing a call to wToPrefixedFileW
2025-10-29 06:20:51 -07:00
Andrew Kelley
441d0c4272
std.Io.net.HostName: fix missing group cancel
2025-10-29 06:20:51 -07:00
Andrew Kelley
f9de83c90e
std.Io.net: skip testing netInterfaceNameResolve on Windows
...
let's handle this in a follow-up change. implementation needs to use
ConvertInterfaceNameToLuidW and the additional dependency on
Iphlpapi.dll poses some challenges.
2025-10-29 06:20:51 -07:00
Andrew Kelley
f6c5525c84
std.Io.Threaded: fix compilation on pthreads linux
2025-10-29 06:20:51 -07:00
Andrew Kelley
fd7475c8b2
std.Io.Threaded: implement netWrite for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
6cff32c7ee
std.Io.Threaded: implement netRead for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
a8f95e5176
std.Io.Threaded: implement cancellation for pthreads
...
not to be confused with pthread_cancel, which is a useless API.
2025-10-29 06:20:51 -07:00
Andrew Kelley
85e159e652
std.Io.Threaded: closures must always be run even when canceled
2025-10-29 06:20:51 -07:00
Andrew Kelley
ae86c0f529
std.Io: adjust concurrent error set
...
Now std.Io.Threaded can return error.ConcurrencyUnavailable rather than
asserting. This is handy for logic that wants to try a concurrent
implementation but then fall back to a synchronous one.
2025-10-29 06:20:51 -07:00
Andrew Kelley
ecdc00466c
std.Io.net: make it easier to use netReceiveMany correctly
2025-10-29 06:20:51 -07:00
Andrew Kelley
46f7e3ea9f
std.Io.Threaded: add ioBasic which disables networking
2025-10-29 06:20:51 -07:00
Andrew Kelley
5c527a1854
std.Io.Threaded: implement fileStat for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
5d7672f2ad
std.Io.Threaded: stub netConnectUnix for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
a1f177d637
std.Io.Threaded: stub netListenUnix for Windows
2025-10-29 06:20:51 -07:00
Andrew Kelley
5578c760a7
std.Io.Kqueue: implement wait queue per fd
...
Solves the issue when one kevent() call would clobber another if they
used the same file descriptor as an identifier.
2025-10-29 06:20:51 -07:00