#ThreadPool
“Oh, you’ve written your own threadpool! Marvellous. I’m sure you know better than Microsoft. I can’t wait to master its unique API.”
September 25, 2026 at 8:37 PM
- CWBVH now much faster
- DirectX12 and Vulkan benchmark applications
- Hair rendering example (roving capsules)
- Improved included threadpool
- Bring your own threadpool. :)
...And lots more. API is still stable. Come check it out!
September 25, 2026 at 10:53 AM
"How do I manage a threadpool?" isn't necessarily an entirely solved problem, but you'll have to do the work to know you need to solve that problem before you can look into solving it!
September 21, 2026 at 4:17 PM
Since im now doing all coding at work via agents, i must say i miss coding by hand sometimes. Not enough that i would change for work, but in my free-time... ?

Currently optimizing my rust threadpool, and going into super fine detail like this is something i do miss time-to-time
September 18, 2026 at 3:09 PM
More details about those changes and other fixes in the changelog:

github.com/joblib/threa...
threadpoolctl/CHANGES.md at master · joblib/threadpoolctl
Python helpers to limit the number of threads used in native libraries that handle their own internal threadpool (BLAS and OpenMP implementations) - joblib/threadpoolctl
github.com
September 16, 2026 at 8:56 AM
The README now also includes a section about how to empirically assess the subtle semantic variations of various BLAS and OpenMP runtimes:

github.com/joblib/threa...
threadpoolctl/README.md at master · joblib/threadpoolctl
Python helpers to limit the number of threads used in native libraries that handle their own internal threadpool (BLAS and OpenMP implementations) - joblib/threadpoolctl
github.com
September 16, 2026 at 8:56 AM
The documentation in the README of the project has been updated to explain how to achieve this.

github.com/joblib/threa...
threadpoolctl/README.md at master · joblib/threadpoolctl
Python helpers to limit the number of threads used in native libraries that handle their own internal threadpool (BLAS and OpenMP implementations) - joblib/threadpoolctl
github.com
September 16, 2026 at 8:56 AM
Nub v0.9.1 — Nub autosizes the libuv threadpool on beefier machines

Node caps the threadpool at 4. Nub lets this float to the number of machine cores (with conservative nicing beyond 4), increasing max throughput for crypto, zlib, DNS, and native addons like bcrypt and sharp
September 14, 2026 at 3:03 PM
New blog post: a StackExchange.Redis 3 upgrade caused session timeouts that only showed up in production.

The real cause was .NET ThreadPool starvation, not the client, and it took Playwright load testing to reproduce it.

www.nevitech.co.uk/blog/diagnos...

#umbraco #dotnet #redis
Fixing Redis Session Timeouts | StackExchange.Redis 3
How a StackExchange.Redis 3 upgrade exposed .NET ThreadPool starvation in an Umbraco site, and how Playwright load testing finally reproduced and fixed it.
www.nevitech.co.uk
September 8, 2026 at 9:32 AM
Zarr dataset (~1B numbers, (24, 37, 721, 1440) float 32) mean() CPU vs GPU. Manual threadpool gets CPU close to GPU but numpy (1 thread) and dask are quite slow. M4 Max 128GB. MLX code requires so few lines, definitely worth it.

gist.github.com/xevix/c320ed...
September 1, 2026 at 11:42 PM
Redesigning Lokalize's Translation Memory Tab - GSoC Week 9
After working on the UI of TM Tab in Lokalize during the first phase of GSoC, I got back to work on the backend. Currently, only a single TM can be searched in TM Tab. My changes enable querying across multiple selected TMs as per translators' feature request. A little about threads and mutexes before I share week-wise updates. The GUI runs on the main thread, while TM operations (querying, opening/closing databases, removing files) run as jobs on a separate worker thread pool, `TM::threadPool()`. This pool is explicitly capped to a single worker thread at startup- `setMaxThreadCount(1)`. This means TM jobs never actually run concurrently with each other, they queue and execute strictly one at a time (this can be changed given my new changes but will have to be careful). QSqlDatabase connections can only be used on the thread that created them, which is why each job looks up or clones a connection specific to the current thread before querying. A queued connection is what lets a signal emitted on the worker thread safely invoke a slot on the GUI thread: rather than running the slot's code immediately on the emitting thread. A mutex protects shared or concurrently-accessed data. ## Week 7 I spent week 7 exploring other approaches for quering multiple DBs and merging the results. QSqlQueryModel is only useful to get query results from a single db. It just enabled `std::move(*job->query)` and there was no way to append results from other TMs. I felt that my proposed approach, to fire N ExecQueryJobs, merge them in an in-memory SQLite db, and then pass it on to the view, was making things unnecessarily complex and somewhat redundant. I'm sharing the discarded ideas as well in case it helps someone in the future. * Use ATTACH to add other db(s) and perform UNION on the search query. There were some concerns over the complexity of ATTACH and also Lokalize supports remote TMs (PostgreSQL) which doesn't have the provision of ATTACH. * Then, I looked into `QConcatenateTablesProxyModel` which some KDE apps already use, but there is some bug with its working with `QSortFilterProxyModel`. I could have had "N TMDBModel instances" (which doesn't seem like a good idea) for each TM and later join them. ## Week 8 I decided upon `QAbstractTableModel`. Unlike `QSqlQueryModel` (which is a subclass of it), it's more flexible and I had to refactor some of the code. This also meant lazy fetch couldn't be preserved and the results would be stored in `QSqlRecords` (to preserve all the existing usage on results). Manually tested against a single TM. Rewrote the TMJob Test too. I find it strange that we always write a test for it to pass. Also from one of the articles I read: "Use test driven development. When you write the test just before the production code, you would never write a monster test, would you?" ## Week 9 `setFilter()` is modified such that `ExecQueryJob` is fired for each TM. `slotQueryExecuted()` accumulates each job's rows into the model as they arrive, and only fires `resultsFetched()` once every selected TM's job has reported back. Row count is also reported directly at the end. Well, contrary to what I wrote in the last blog, I did end up with an approach quite similar to what TMView does. Are mentors always right? The part on which I spent a lot of time was what happens if someone retypes their query, or checks/unchecks a TM, while the previous search's jobs are still mid-flight. Stale results shouldn't be allowed to land on top of a newer search's rows. The fix is a generation counter to keep track. After a lot of coding and debugging, seeing the resuts from multiple TMs made the entire hard work finally pay off. While testing, the bug mentioned in the previous blog kept pestering me so I fixed it too. I was so fixated on empty/short string that I did not think that the place it was being used could be a problem. It's nice to see the Art of Debugging materialize out of pages of Roger S. Pressman's textbook. I'll begin to work on TM View once these changes are reviewed and merged.
blogs.kde.org
August 26, 2026 at 8:49 AM
TIL that if you rayon::spawn a worker to produce a value that {a task your later par_iter kicks off} might wait on, you can deadlock from threadpool exhaustion.
Spawning the 1st worker with std::thread probably fixes it, but it's remarkably hard to reproduce the issue… #rustlang
August 23, 2026 at 5:55 AM
There's a pattern that keeps coming up and I don't know if it has a name, but I wanted to share:
Nothing fancy really, just a way of shoving arbitrary funcs (including capturing lambdas) into ordinary func pointers without needing any inheritance or allocation.
E.g. ThreadPool:
August 18, 2026 at 10:12 PM
all using a threadpool to parallelize that work up to CPU count (there's only like 2 tasks at a time right now and it still helps lol)
August 8, 2026 at 9:30 PM
You need a threadpool and a tasking model for that, really. I get other languages try, but C# does something special with async/await tbh
August 8, 2026 at 7:07 AM
Threading on Thin Ice: Demystifying the .NET ThreadPool and avoiding starvation itnext.io/threading-on... #dotnet
Threading on Thin Ice: Demystifying the .NET ThreadPool and avoiding starvation
Introduction
itnext.io
July 21, 2026 at 8:29 PM
Just had a quick search and their session builder keeps it at the defaults if you do nothing which means you'll get a intra op threadpool == number of physical cores. So busy spinning by default. If inference is simple you could also try out rten with the model which just uses rayon I think.
July 21, 2026 at 12:19 PM
Your Loom App Quietly Became a Thread Pool Again: A Field Guide to Virtual Thread Pinning

#java #thread #threadpinning #threadpool #virtualthread

dev.to/maschiojv/your-l...
Your Loom App Quietly Became a Thread Pool Again: A Field Guide to Virtual Thread Pinning
The incident that taught me to respect pinning looked like nothing. A service freshly migrated to...
dev.to
July 16, 2026 at 5:02 PM
Peewee 4.0 ships native async support via greenlets, unified JSONField, and eager-load APIs. No more threadpool workarounds in FastAPI—queries now await cleanly on the event loop. Sync-to-async bridges officially dead. https://thedevsign

https://thedevsignal.com?utm_source=bluesky&utm_medium=social
July 7, 2026 at 10:25 PM
- the dashboard i built for it to be the source of truth was anything but and the real status and the dashboard kept drifting
- various O(n) footguns
- stale ClickHouse keepalive sockets
- libuv DNS threadpool starvation
- silly and wrong constants causing trouble
- plc mirroring stalled for 9 hours
June 26, 2026 at 11:03 PM
TinyBVH 1.7.2 (dev branch) now adds "Bring Your Own Threadpool" (thanks @wjakob.bsky.social!):
Replace the built-in job system (adapted from Wicked Engine) by an alternative, using three hooks in BVHContext.
TinyBVH remains single-header and dependency-free of course.
github.com/jbikker/tiny...
GitHub - jbikker/tinybvh at dev
Single-header dependency-free BVH construction and traversal library. - jbikker/tinybvh
github.com
June 21, 2026 at 5:02 AM
🔄 Channels & ThreadPool for data exchange between coroutines. Buffered and unbuffered channels for producer/consumer patterns, cross-thread via ThreadChannel, and parallel CPU tasks via Thread and ThreadPool.
June 11, 2026 at 6:11 AM
Put the state machine cycling on a loop and you have an async actor. Put it on a threadpool and you have the C#/Go/Erlang/etc. type actors. Put the queue on a network interface with actors on different computers and you're doing Akka/Orleans shit.
June 3, 2026 at 10:36 PM