I forget, does MINA uses the same Processor for both read and write operations? If so, there will never be contention unless you use a Thread Executor Pool in the Filters.
If you look at the tests here: https://dzone.com/articles/synchronized-vs-lock You can see that until you really hit > 2 threads, sync actually is faster. Personally, I use a custom ReentantLock but my use-case is much more complicated. On Tue, Sep 19, 2017 at 1:31 AM, Emmanuel Lécharny <elecha...@gmail.com> wrote: > > > Le 19/09/2017 à 00:24, Jonathan Valliere a écrit : > > Synchronization, unlike Locks, does not create any memory garbage and are > > just as fast as CAS under low locking activity. Just because CAS/ Locks > > are faster when 8 threads are accessing one object, doesn't mean that > > standard Mutex Synchronization doesn't work just find when almost all of > > the time a single thread acquires the lock. In reactor IO frameworks, > > there is almost never more than one thread accessing the resource. Full > > Locks are usually overkill unless there is something specific you want to > > attempt. NIO internally uses the synchronized keyword for all state and > > read / write locking anyway. > > FTR, the number of threads MINA uses by default is pretty limited : nb > Cores +1. The main place where yo ight have contention is when responses > are enqueued, because a session might be active on more than one thread > (like, for LDAP, you might have a Search request *and* an Abandon > Request executed in parallel). > > IMHO, such a situation should be quite rare, as you said, and it would > worth it analyse the pros and cons of each solution, my point being that > we simply discarded using alternative synchronisation mechanisms years > ago (but that was back when Java 5 was out, when we were stuck on Java > 4). We haven't revisited the item since them, or barely. > > What I mean is that the code base is pretty old and we should, at some > point, check if any other solution wouldn't be better all things being > equal. And if synchronized sections are proven o be more efficient in > the general case, there is no reason to ditch it, of course ! > > > Thanks for your valuable input ! > > > > On Mon, Sep 18, 2017 at 5:35 PM, Emmanuel Lécharny <elecha...@gmail.com> > > wrote: > > > >> > >> Le 18/08/2017 à 07:53, 胡阳 a écrit : > >>> Hi guys: > >>> I read the source code of MINA3.0M2. The style of the code is very > good, > >> the structure is clear, the design is concise and efficient, especially > the > >> use of Selector is unexpected. However, the enqueueWriteRequest method > and > >> the processWrite method in the AbstractNioSession are somewhat flawed. > >>> I see the source code in the enqueueWriteRequest method was originally > >> "synchronized (writeQueue)", but was commented out, personal speculation > >> may be the author feel that this treatment will affect performance. > >>> My approach is to use CAS to ensure memory visibility and atomic, see I > >> see the startSync, finishSync method, feeling that this may be more > secure > >> after some of the performance will not lose too much. > >>> A little personal humble opinion. > >> Sorry for coming back so late... Busy days :/ > >> > >> I do agree that we should use CAS whenever we can, and Thread Local > >> Storage, instead of any other synchronisation solution. > >> > >> Feel free to propose patches that we could inject into teh code ! > >> > >> -- > >> Emmanuel Lecharny > >> > >> Symas.com > >> directory.apache.org > >> > >> > > -- > Emmanuel Lecharny > > Symas.com > directory.apache.org > >