Because usually the number of threads you can spawn per process or per user is limited. By opening a large number of concurrent connections I'd either force your app to run out of threads or starve it by flooding it with context switching.
Then you want to perform that blocking operation in another thread (or better yet using a limited thread pool) and not push the whole communication there. You can decouple whatever you want decoupled by encapsulating it in an object. You don't require threads for that.Why threads? -> Maybe every connection can do a blocking operation in my application and therefore I want to decouple them from the rest of the application/listener.
Bookmarks