A {@link DatagramChannelFactory} which creates a client-side blockingI/O based {@link DatagramChannel}. 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 OioDatagramChannelFactory}; worker threads.
Worker threads
Each {@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 OioDatagramChannelFactory} 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 DatagramChannel} created by this factory does not support asynchronousoperations. Any I/O requests such as {@code "write"} will be performed in ablocking manner.
@author The Netty Project (netty-dev@lists.jboss.org)
@author Trustin Lee (tlee@redhat.com)
@version $Rev: 1029 $, $Date: 2009-03-12 23:48:48 +0900 (Thu, 12 Mar 2009) $
@apiviz.landmark