I would add Brian Goetz take on synchronized vs Lock :

https://www.ibm.com/developerworks/library/j-jtp10264/



Le 19/09/2017 à 15:28, Jonathan Valliere a écrit :
> 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
>>
>>

-- 
Emmanuel Lecharny

Symas.com
directory.apache.org

Reply via email to