Due to some performance improvements we are trying to make to our system, I'm trying to understand how Vertx Webclient is actually non-blocking.
From my understanding, in regular old java, an http call using java.net (or maybe a regular HTTP client implementation), will acquire an http connection on a thread. While that http requests is fulfilled, that thread is blocked. If one configures a pool of 20 threads and executes 20 http requests, the pool will be exhausted.
However, this doesn't seems to be the case in Vertx. One can execute many http requests using Webclient in the event-loop without blocking it.
In short, I'd like to know how Vertx Webclient manages to avoid blocks? Does it delegate execution to a worker thread-pool? Does it use some low level technique? If it is not using a thread-pool, what's the limit of requests it can handle at the same time?
Docs seem to just explain its usage but now how it actually works: https://vertx.io/docs/vertx-web-client/java/#_using_the_web_client