I was profiling my MINA-based application (which runs on CPU- and
memory-constrained machines) and determined that MINA uses a
surprisingly large number of threads (dozens of
DatagramAcceptor/AnonymousIoService threads). I had not configured MINA,
so I looked at the "Configuring Thread Model" documentation, but it
wasn't very helpful, in part since it is written for TCP applications.
As I understand things, most of MINA's defaults and its documentation
assume that the application is a stream-socket-based server where
connections can be handled roughly independently. The problem is that
I'm writing a UDP-based routing overlay network, meaning that I maintain
a single piece of state.
A single-threaded reactor would serve best for my application. While
there *are* fine-grained opportunities for concurrent handling of
packets, MINA has no awareness of the circumstances under which they may
be exploited, so concurrency should be left up to the application. As a
simplified example, based on a received message type, I may hand off a
long-running computation to a separate worker thread, but the norm is to
reply immediately. The dual, which is how things work currently, is that
usually multiple IO reactor threads contend for a global lock on the
state (introducing unnecessary synchronization overhead, memory
consumption, etc.), and occasionally a reactor thread does not require
the global lock and proceeds with the long-running computation.
It would be further beneficial if I could use the same reactor thread to
schedule tasks, rather than using a separate ScheduleExecutorService,
since these tasks end up executing in serial order anyway with packet
handling. I had posted previously about this:
http://www.nabble.com/Asynchronous-timeout-sleep-delay-etc.-tt12893472.html
Does anyone have advice on how to configure MINA to best suit my needs?
And if I can in fact configure everything to run in a single thread,
does MINA special-case this to introduce zero synchronization overhead?
I'd like to not remove MINA since time is short, but alas, time is short. :)
Thanks in advance.
--
Yang Zhang
http://www.mit.edu/~y_z/