[ 
https://issues.apache.org/jira/browse/DIRMINA-1095?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16634143#comment-16634143
 ] 

Jonathan Valliere edited comment on DIRMINA-1095 at 10/1/18 3:01 PM:
---------------------------------------------------------------------

The code as-is only performs that scheduling loop when the SelectionKey returns 
isWritable().  This is an optimization right there to prevent the scheduling 
from occurring every single time the SelectionKey is awake.  Either the 
NioSessions should be associated to a specific DatagramChannel and optimize 
there by only looping on ones belonging to that specific DatagramChannel or 
nothing should be done.  Either way, unless you are binding to lots of ports; 
any performance benefit from the association optimization would be minimal.

P.S. Calling scheduleFlush(NioSession) multiple times has little negative 
performance impact because the NioSession is only added to the Queue once due 
to a boolean gate NioSession.setScheduleForFlush().


was (Author: johnnyv):
The code as-is only performs that scheduling loop when the SelectionKey returns 
isWritable().  This is an optimization right there to prevent the scheduling 
from occurring every single time the SelectionKey is awake.  Either the 
NioSessions should be associated to a specific DatagramChannel and optimize 
there by only looping on ones belonging to that specific DatagramChannel or 
nothing should be done.  Either way, unless you are binding to lots of ports; 
any performance benefit from the association optimization would be minimal.

P.S. Calling scheduleFlush(NioSession) multiple times has no negative 
performance impact because the NioSession is only added to the Queue once due 
to a boolean gate NioSession.setScheduleForFlush().

> Seems like the management f UDP sessions is really unneficient
> --------------------------------------------------------------
>
>                 Key: DIRMINA-1095
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1095
>             Project: MINA
>          Issue Type: Improvement
>    Affects Versions: 2.0.19
>            Reporter: Emmanuel Lecharny
>            Priority: Major
>             Fix For: 2.0.20
>
>
> When we process incoming UDP messages, we iterate over the activated 
> {{SelectionKey}}s. That's ok, but for each one of them, we read the data and 
> try to flush the scheduled messages. The loop where it's done seems to 
> iterate on *all* the managed sessions, for each keys we are processing :
> {code:java}
>    private void processReadySessions(Set<SelectionKey> handles) {
>         Iterator<SelectionKey> iterator = handles.iterator();
>         while (iterator.hasNext()) {
>             SelectionKey key = iterator.next();
>             DatagramChannel handle = (DatagramChannel) key.channel();
>             iterator.remove();
>             try {
>                 if (key.isValid() && key.isReadable()) {
>                     readHandle(handle);
>                 }
>                 if (key.isValid() && key.isWritable()) {
>                     for (IoSession session : getManagedSessions().values()) {
>                         scheduleFlush((NioSession) session);
> ...
> {code}
> There is no reason to do so. First, we should not iterate on all the managed 
> sessions (we may have thousands), but only the sessions which have something 
> to write, and we certainly should not do that for every active key...



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to