Woaw, impressive. Even if it is not a fully feature I/O library, having an efficient multithreaded dispatcher is impressive. But for now, there doesn't exists any good asyncio library not relying on async/await. I have looked over projects using threads, but they are not focused on I/O. It is still the consensus that if you want async I/O, you should use something like std/asyncdispatch.
But I still think that concurrent programming has usage case different than parallel programming and are best suited for I/O and complex flow of execution. But yes, there are tradeoffs. And if there is a thread library that can handle efficiently tens of thousands of multiple I/O including non-regular files and with a simple API, I just say a big YES (otherwere that would throw to trash my last three months of works, but so be it, the journey is the destination and I learned a lot) For precision, coroutines can optionally be backed by virtual memory (not the default in NimGo). If so, generally we assign them as much virtual memory as a thread. But contrary to Go which integrates its own scheduler, they are not automatically resized, so there is a risk of stackoverflow.