How much memory do you need to run 1M concurrent tasks?
It's not really fair to compare async/await systems with Go and Java.<p>Go and Java with lightweight threads provide a full-blown system, without any limitations. You don't have to "color" your code into async and blocking functions, everything "just works". Go can even interrupt tight inner loops with async pre-emption.<p>The downside is that Go needs around 2k of stack minimum for each goroutine. Java is similar, but has a lower per-thread constant.<p>The upside is that Go can be _much_ faster due to these contiguous stacks. With async/await each yield point is basically isomorphic to a segmented stack segment. I did a quick benchmark to show this: <a href="https://blog.alex.net/benchmarking-go-and-c-async-await" rel="nofollow">https://blog.alex.net/benchmarking-go-and-c-async-await</a>