A {@link ClientSocketChannelFactory} which creates a client-side blockingI/O based {@link 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 {@link OioClientSocketChannelFactory}; worker threads.
Worker threads
Each connected {@link Channel} has a dedicated worker thread, just like atraditional blocking I/O thread model.
Life cycle of threads and graceful shutdown
Worker threads are acquired from the {@link Executor} which was specifiedwhen a {@link OioClientSocketChannelFactory} was created (i.e. {@code workerExecutor}.) Therefore, you should make sure the specified {@link Executor} is able tolend 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, and
- call {@link #releaseExternalResources()}.
Please make sure not to shut down the executor until all channels are closed. Otherwise, you will end up with a {@link RejectedExecutionException}and the related resources might not be released properly.
Limitation
A {@link SocketChannel} created by this factory does not support asynchronousoperations. Any I/O requests such as {@code "connect"} and {@code "write"}will be performed in a blocking manner.
@author The Netty Project (netty-dev@lists.jboss.org)
@author Trustin Lee (tlee@redhat.com)
@version $Rev: 536 $, $Date: 2008-11-28 20:18:21 +0900 (Fri, 28 Nov 2008) $
@apiviz.landmark