You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2015/10/07 18:29:27 UTC

[jira] [Reopened] (DIRMINA-934) Replace synchronized with a Semaphore for better performance

     [ https://issues.apache.org/jira/browse/DIRMINA-934?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Emmanuel Lecharny reopened DIRMINA-934:
---------------------------------------

Actually, this was a bad idea...

The pb with the semaphore is that it creates a lock that is global for an instance of the codec filter. If one don't crate as many filter as there are sessions, then this will create a bottleneck.

The synchronized(decoder) is also a problem though : it creates a bottleneck on the decoder, which might not be instanciated for each session, but shared. In this case, we have a serialization of the decoding across all the server, which is even worse (and that was what this patch was trying to solve, AFAICT).

The right solution would instead be to synchronized on the session, because there is no way that could create a bottleneck :
- each session will be able to use the decoder at will, in a serial way
- a session won't lock another session during a decoding

A side remark : on TCP, there is no reason we should have an executor being present *before* the decoder, because that would forbid the decoding of a split messages. On UDP, there is no such problem, so we *may* want later to remove the synchronized section when we are on UDP.

> Replace synchronized with a Semaphore for better performance
> ------------------------------------------------------------
>
>                 Key: DIRMINA-934
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-934
>             Project: MINA
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 2.0.7, 2.0.8
>         Environment: Window 8 Pro x64, JDK 7
>            Reporter: Paul Gregoire
>              Labels: patch
>             Fix For: 2.0.8
>
>         Attachments: ProtocolCodecFilterWithSemaphoreAndMore.diff
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> Replacing the synchronized block with a Semaphore in the ProtocolCodecFilter provides a lot of benefit in terms of locking and also reduces CPU utilization. See attached git diff.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)