[ 
https://issues.apache.org/activemq/browse/CAMEL-1930?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=54718#action_54718
 ] 

Fabrice Delaporte commented on CAMEL-1930:
------------------------------------------

Hi Claus,

Sorry for the delay, been quite busy these days but finally got some time to 
run some tests against your patch.

Attached is my own version (heavily inspired by your own test case). By the 
way, why are you using an Executor to send your message to the SEDA queue ? 
Being an asynchronous endpoint I'm not sure I see the point in using a thread 
pool.

Anyway, I'm sending 100 000 xml messages (a little bit bigger than yours) to 
the seda queue, and then awaits for the mock endpoints to reach their expected 
message count to measure actual processing time. The XPath expression is also 
closer from what we may have here in production (kind of a big switch on the 
message type, there may be more efficient ways to do that (especially get rid 
of the // wild card to put a true /message/messagetype) but that's not the 
point here, the point is that we get something heavier on the CPU side. And, 
actually, setting a low value for consumer count does not prevent contention 
from happening (10 in my test case).

Results are pretty cool. On my computer it gives on average :
- around 150s without your patch
- around 110s with the patch

That's about 36% faster, so I think it's worth including the patch, although I 
have to admit that the performance difference is smaller than what I had 
expected (I guess that the more cores you have, the bigger the difference).

In addition to that I also attached two screenshots of my instance of JVisualVM 
to show contention without the patch (red threads) and with the patch (yeah, 
that green is beautiful).

Cheers,
Fabrice


> Synchronized access to XPathExpression resulting in contention for multiple 
> consumers
> -------------------------------------------------------------------------------------
>
>                 Key: CAMEL-1930
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1930
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.0-M3
>         Environment: Java 1.6, Spring 2.5.6
>            Reporter: Fabrice Delaporte
>            Assignee: Claus Ibsen
>             Fix For: 2.1.0
>
>         Attachments: camel_1930.patch, with-contention.jpg, 
> without-contention.jpg, XPathRouteConcurrentBigTest.java
>
>
> Hi,
> I'm using Camel to do some JMS message routing. Messages are XML so xpath is 
> a natural choice.
> However when using a choice with an xpath expression, the XPathBuilder 
> creates one XPathExpression object. According to the specification, these 
> objects are not thread safe so synchronizing looks natural. But then, using 
> multiple jms consumers is totally useless since no concurrent evaluations can 
> be made.
> XPathExpression objects would rather need to be stored in a ThreadLocal to 
> avoid synchronization and contention.
> Cheers,
> Fabrice

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to