Let’s say I’m running a server, and set client SocketChannels that I accept as non blocking, and read them through a thread pool’s threads. But what does that buy me? I anyway need to read the full client request before processing it, which means I need to make multiple read calls.
I’ve also come across articles saying that threads should block naturally so it gives a chance to other threads to run. However this won’t happen in the aforementioned case as these threads will not block.
So how would non blocking IO be efficient? How to make sense of this all? Some multi-core CPU angle to it perhaps? But how?
EDIT: found a pretty good link that explains it programmatically:
Unless you want to use busy waiting (which sounds unlikely) if you want to use non-blocking you usually use a small number of threads (may be only one) and a Selector.
If you are going to use blocking IO, that is when you dedicate one or two threads per connection.