[ https://issues.apache.org/jira/browse/DIRMINA-1095?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16633956#comment-16633956 ]
Jonathan Valliere commented on DIRMINA-1095: -------------------------------------------- I believe that MINA was designed to operate this way on purpose otherwise changing the SelectionKey interest to WRITE for every single UDP packet might cause a huge performance problem by requiring an epoll_ctrl() call every time. > 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)