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.
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.
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.
16 comments
[ 4.5 ms ] story [ 37.5 ms ] thread[0] https://github.com/scylladb/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
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.
https://github.com/GNOME/libdex/
[1]: https://github.com/systemd/systemd/pull/39771