Caldarale, Charles R wrote:
From: Leon Rosenberg [mailto:rosenberg.l...@googlemail.com]
Subject: Re: Performance with many small requests

If you would share your test code, I would love to test it on
some *nixes and darwins I have here;

Here's the code I used to do the synch vs atomic testing.  The command line 
parameter is the number of loops to perform; you'll want to set it to at least 
1000000000, and even then run repeated tests - the timings can vary 
considerably, at least under Vista.

(Also being sent directly to the two requesters, in case the list strips the 
attachment.)

Might be interesting to modify it to run with more cores, if you have a system 
available.

 - Chuck
My dev machine:  WinXP SP3, dual-core 2.8GHz processor, java 1.5.0_12.

First, I ran it in Eclipse as supplied, with looplimit = 10000000, and got:

secondary atomic time: 6890; ticks: 51773402
primary atomic time: 6890; ticks: 48226599
secondary synchronized time: 21281; ticks: 50282172
primary synchronized time: 21281; ticks: 49717829

Then I reversed the order of the tests (just to be sure it didn't matter) and got similar results:

secondary synchronized time: 21219; ticks: 49601191
primary synchronized time: 21234; ticks: 50398810
secondary atomic time: 6734; ticks: 52111089
primary atomic time: 6734; ticks: 47888912


Running at a command line (java -cp . TestSynch) gave me rather different results (qualitatively similar, quantitatively rather different):

primary synchronized time: 42998; ticks: 59125831
secondary synchronized time: 42998; ticks: 40874170
secondary atomic time: 4953; ticks: 49025722
primary atomic time: 4953; ticks: 50974279

After several tests, the ratio between the synchronized and atomic times varied between about 5 and 9, but atomic was always the lower time. Running two instances simultaneously didn't change the numbers much (as expected from a dual-core machine), but the command window with the focus always ran significantly faster than the one without it, no matter which one was started first.

One very surprising result (to me, anyway) was that 4 instances only extended the time numbers slightly (<10%) for the synchronized run, and even less for the atomic run. Going to 8 instances made a dramatic increase in the synchronized time, but again only a slight increase in the atomic version. 16 instances was too much for my system; it took a long time to start the last 8 or so, and both the atomic and the synchronized versions took a lot longer.

From these tests, it looks like, under windows XP and java 1.5 any way, that atomics are always faster, and also handle increasing concurrency much better than synchronize() blocks do.

Now to test on my server!!

Dave




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to