@mratsim thanks for the sharing. This is indeed a very informative paper you shared. I will link it on top of my library to warn of the risks of using stackful coroutines. I bet Go language have incorporated security mechanisms directly in their runtime, which must induce some overhead to control the avoid stackoverflow.
I bet the remaining options are either keeping the colorful stackless coroutines like async/await, or going fully into threads. But sadly, full async I/O library relying on threads are almost unexistent (and in any languages). It's just such a joy to have a library like NimGo library where you can do asynchronous with no friction, and be able to just do something like that goStdin.readFile(canceller = sleepTask(500)) with not having to deal with Futures. But indeed, not advisable to use in production code like servers.