16 comments

[ 4.5 ms ] story [ 37.5 ms ] thread
Looks really interesting. I assume this suggests that ClickHouse is going to gradually switch to using this library for network and I/O, thus addressing the main weakness (in my mind) of C++ thread-per-connection servers, which is, they (surprisingly!) create too many threads and can't really handle more than, say, a thousand active connections at the same time. It mostly matters for async INSERTs in this case of course, not for SELECTs, although generally it applies to both.
Is this comparable to Sea star [0]?

[0] https://github.com/scylladb/seastar

I have some experience with Seastar.

Seastar and Silk are both event-driven, thread-per-core platforms with synchronization and scheduling facilities built-in.

Seastar is meant to be an integrated platform so it includes I/O and networking primitives for high-performance storage and socket operations to boot.

Silk does not appear to take an opinion on how the actual work performed on the thread should be architected

Seems not exception safe when task switching during unwind.
The `Cilk` angle is interesting. There’s still room for small runtimes focused just on fork/join recursion.

I’ve been working on one for C: https://github.com/xtellect/cactus

It’s narrower than Silk/SeaStar: continuation stealing for CPU-bound recursive code, not a general async I/O fiber runtime.

Looks like its using MinIO for the S3 benchmark, which is now archived. I wonder what they'll switch to (if anything)
those who don't learn Erlang/Elixir are bound to reinvent the Erlang VM and OTP model.
I've been doing this with something very similar in GNOME for years now. It also does io_uring, threadpool schedulers, workstealing, "pollable semaphores" (like IRIX), profiler integration, and makes fibers implemented as futures themselves.

https://github.com/GNOME/libdex/

It's interesting how some ideas very quickly start popping up everywhere at once. One of my colleagues was working on adding support for fibers to systemd for some time (and the PR was merged a few days ago[1]!). From my understanding, this model is really quite useful for programs like pid1 that cannot use threads.

[1]: https://github.com/systemd/systemd/pull/39771

This feature (fibers in systemd) was also modeled after libdex (which I wrote for GNOME).