I know what you mean by the post and your current assertion that non-blocking is "always" wrong regardless of architecture, but I think there are a few caveats that you really need to apply here.
You are talking about a problem domain where concurrency is what you are scaling and where the things that would block are orders of magnitude slower than processor time.
If you were working in a problem domain where latency is what you are scaling and the blocking calls are on the same order as processor time, non-blocking approaches can be best as the blocking mechanism can still carry overhead even with light weight threads.
Maximizing throughput is another beast entirely as well.
You are talking about a problem domain where concurrency is what you are scaling and where the things that would block are orders of magnitude slower than processor time.
If you were working in a problem domain where latency is what you are scaling and the blocking calls are on the same order as processor time, non-blocking approaches can be best as the blocking mechanism can still carry overhead even with light weight threads.
Maximizing throughput is another beast entirely as well.