[
https://issues.apache.org/jira/browse/AMQ-3933?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13416972#comment-13416972
]
Martin Chan Shu Ching commented on AMQ-3933:
--------------------------------------------
My test attached. Basically what you need to do are:
1. change the LinkedList with ConcurrentLinkedQueue for dispatchQueue
2. remove all synchronized block embracing the dispatchQueue
3. change dispatchQueue.add() with dispatchQueue.offer()
4. change dispatchQueue.remove(0) with dispatchQueue.poll()
Since i made my change in 5.3.1 source so I am not uploading the change because
the same change should probably be done in the head.
Attached is a simple test program which creates 1000 consumers and publishes
5000 message, if all consumers receives all messages then the change is safe.
We have deployed to a production environment without issue.
> TransportConnection.dispatchQueue synchronized LinkedList to
> ConcurrentLinkedQueue
> ----------------------------------------------------------------------------------
>
> Key: AMQ-3933
> URL: https://issues.apache.org/jira/browse/AMQ-3933
> Project: ActiveMQ
> Issue Type: Improvement
> Affects Versions: 5.6.0
> Environment: Linux
> Reporter: Martin Chan Shu Ching
> Priority: Minor
> Labels: newbie
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> TransportConnection.dispatchQueue currently uses a synchronized LinkedList to
> pass all objects between the broker and the transport connection to the
> client. This isn't very efficient as the whole list is locked whenever an
> item is added or removed. ConcurrentLinkedQueue is about 20% faster in my
> tests.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira