проблема блокирующих операций в том, что корутина дальше не пойдет, пока операция не выполнится. поэтому либо делить операцию на сиквенсы делать суспенд функции, чем занимаются библиотеки (в случае с интернет-запросами), либо выполнять в IO, который корутины не в одном потоке выполняет
... либо уходить в NIO1 или NIO2. Первый, на коллбэках, по-моему сам под капотом использует небольшой тредпул, а второй, на селекторах, даёт тебе контроль (и геморрой) над частотой опроса событий