That's cool. I was not even aware of this paper. I took my personal journey through this space, which started with me bemoaning Java's design wrt to IO & concurrency. Trying to write a high performance server that is immune to slowly connected clients is so tricky. When node was released, I embraced the model and even wanted to build a replacement for java.io
. I started working on it as a hobby and later dropped it when I was trying out Go and realizing the immense practical benefits of not dealing with events directly. I'm still very fascinated that runtimes are often evaluated purely on their ability to run straight-line code quickly and those that attempted user-space threading in the past have been strongly nudged to kernel threads. Java went through this and now rust seems to also be working its way through this as well. Go and Erlang seem to have put their stake so firmly on the other side of the river by having the user-space thread decision prevalent in the libraries that the debate isn't really possible.