When you start to learn about Kotlin Coroutines, one of the first examples you see is that it is possible to start hundreds of thousands of Coroutines, but run into OutOfMemory Exceptions when trying the same thing with Threads.
While this example is "cool", I don't think it is useful and even a bit misleading for real-world Android application development. Sure, you can start hundreds of thousands of Coroutines that do nothing but delay(), but in reality, you either start coroutines that do some kind of IO or some kind of calculations.
If you, for instance, start hundreds of thousands of Coroutines and each performs a network request with Retrofit, it wouldn't be any more lightweight than using Retrofit conventionally without Coroutines, because okhttp still blocks a thread for each request.
The same is true when you are doing calculations in coroutines. Then it is also not more lightweight, as the threads which are doing the calculations are blocked until they have finished.
So is my assumption correct, that without the existence of non-blocking IO libraries, my app will not get more efficient or "light-weight" just by using Coroutines or am I missing something?