Maarten, seems like all is executing in the same thread.  I printed
out thread ids.  The executor is configured to 20 threads and I pushed
a very high load, which generated thousands of messageReceived events,
all with same thread id.  I'm using IoHandlerChain, but that should
matter.  I know the chain executes in a serial fashion, but it seems
like the

config.getFilterChain().addLast("executor", new
ExecutorFilter(Executors.newFixedThreadPool(20)));

is being ignored?

Any ideas?

Ilya

On Thu, Sep 25, 2008 at 1:01 PM, Maarten Bosteels
<[EMAIL PROTECTED]> wrote:
> On Wed, Sep 24, 2008 at 4:41 AM, Ilya Sterin <[EMAIL PROTECTED]> wrote:
>> I'm using mina 1.1.6 to connect to a TCP server.  Everything is
>> working, encoder/decoder and the IoHandler.  I'm having an issue
>> understanding the thread model.  I'm having some thoughts as to
>> whether threads are actually being spun off when IoHandler is invoked.
>>  The actions we're performing are rather lite, so I used a profiler to
>> capture a few snapshots.  Each one revealed only one IoHandler thread
>> being executed at a particular time.
>>
>> My configuration is as follows, I extracted only the relevant lines...
>>
>>
>> ExecutorService executor = Executors.newFixedThreadPool(threadDefault);
>> config.getFilterChain().addLast("to-operation", new
>> ProtocolCodecFilter(codecFactory));
>> config.getFilterChain().addLast("executor", new ExecutorFilter(executor));
>>
>> try {
>>  acceptor.bind(instance.getAddress(), new ChainedIoHandler(handler), config);
>> }
>> catch (IOException e) {
>>  e.printStackTrace();
>> }
>>
>>
>> The executor is added to the filter chain last, as per documentation
>> on the mina site, but I was also having a hard time understanding the
>> small snippet of documentation that explained the thread model usage,
>> so I'm not positive that by pushing the executor service into the
>> filter chain would make it execute each IoHandler in its own thread.
>
>
> I am using MINA 2.0 for quite some time so maybe my memories about
> MINA 1.x are not completely accurate.
>
> There's only one IoHandler, so I am not sure what you mean with
> "execute each IoHandler in its own thread." ?
> You probably mean each invocation of IoHandler.messageReceived ?
>
> Keep in mind that MINA tries to avoid the threads-per-connection
> paradigm. Instead all network events are put in a queue and processed
> by an executor.  When the load is low, it's possible that all events
> are processed by the same thread, even when the executor has more
> threads available.
>
> If you want to ensure that the executor uses multiple threads:  print
> out the name of the current thread inside your messageReceived
> implementation AND generate a high load on your application.
>
> regards,
> Maarten
>
>
>>
>> Thanks.
>>
>

Reply via email to