Async I/O and threads are two different things, and either can be present in real code without the other.
I have ran a lot of programs containing race conditions successfully many times until I ran into an issue.
At any rate, test_asyncio contains a lot of tests that involve threads and specifically thread safety between coroutines and those tests fail. As far as async I/O and threads being distinct, I mean sure that is true of a lot of features but people mix features together and mixing asyncio with threads will not work with this particular release.
> small threaded programs had been run successfully
The second obviously contradicts the first, doesn't it?
> mixing asyncio with threads will not work with this particular release.
That's a very different claim to the first, and one that no longer conflicts with the second, isn't it?
> When we found out about the “nogil” fork of Python it took a single person less than half a working day to adjust the codebase to use this fork and the results were astonishing. Now we can focus on data acquisition system development rather than fine-tuning data exchange algorithms.
Read PEP-703 (https://peps.python.org/pep-0703/#performance) where the performance hit is currently 5-8%
If you only care about single thread there's all kinds of stuff you can do.