A
ClientSocketChannelFactory which creates a client-side blocking
I/O based
SocketChannel. It utilizes the good old blocking I/O API
which is known to yield better throughput and latency when there are
relatively small number of connections to serve.
How threads work
There is only one type of threads in
OioClientSocketChannelFactory;
worker threads.
Worker threads
Each connected
Channel has a dedicated worker thread, just like a
traditional blocking I/O thread model.
Life cycle of threads and graceful shutdown
Worker threads are acquired from the
Executor which was specified
when a
OioClientSocketChannelFactory was created (i.e.
workerExecutor.)
Therefore, you should make sure the specified
Executor is able to
lend the sufficient number of threads.
Worker threads are acquired lazily, and then released when there's nothing
left to process. All the related resources are also released when the
worker threads are released. Therefore, to shut down a service gracefully,
you should do the following:
- close all channels created by the factory usually using
ChannelGroup#close(), and
- call
#releaseExternalResources().
Please make sure not to shut down the executor until all channels are
closed. Otherwise, you will end up with a
RejectedExecutionExceptionand the related resources might not be released properly.
Limitation
A
SocketChannel created by this factory does not support asynchronous
operations. Any I/O requests such as
"connect" and
"write"will be performed in a blocking manner.