Years ago, I went to one of Douglas Crockford's talks where he advocated for non-blocking server-side code with Node.js. This was long before Javascript and Node.js had "async."
At the time, Node.js only worked with callbacks, and compared to threaded code in most other languages, the callbacks quickly became cumbersome and difficult to follow.
I asked, "Is there a way to make callback code cleaner?"
Doug's answer had no insight, it was basically something like, "they're messy, deal with it."
A few years later, C# introduced "async" and Javascript quickly followed.
---
The thing is, maintainability of code is very critical. A lot of code doesn't need the kind of scalability that Douglas was advocating in his speech; maintainability is a lot more important than shaving off a few CPU cycles.
I now take everything he says with a lot of grains of salt.