I added a Clojure implementation based on an Atom instead of a Ref,
and re-ran the tests (this time on a quad core machine). I also fixed
the calculation of the percent change in both tests (ugh).

It looks like using an Atom is slightly more performant than a Ref if
you are making a single state change that is commutative/indempotent.
Also, RWDict fell apart on a quad core machine (independent of the
number of writes): I'll try with the alternative fairness setting like
you suggested.

Thanks,
Stu

On 1/16/09, Christian Vest Hansen <karmazi...@gmail.com> wrote:
>
> Another thing you might want to test is the fairness of the rw-lock in
> your RWDict, because even a couple of very active readers can easily
> starve out any number of writers when the rw-lock is non-fair. The
> reason is simple: readers can interleave but writers cannot, and
> writers can only get in when noone is reading :)
>
> On Fri, Jan 16, 2009 at 4:21 AM, Stu Hood <stuh...@gmail.com> wrote:
>>> Ah! but a mere hash table is not bi-directional :-)
>> Right =)  I got the idea in a Channel 9 video about MS' efforts with STM:
>> http://channel9.msdn.com/shows/Going+Deep/Software-Transactional-Memory-The-Current-State-of-the-Art/
>> (which reminds me, the spin-lock approach they try is probably fairly
>> close
>> to using an Atom in Clojure).
>>
>> I made the changes that Christophe suggested, and added type hints for the
>> HashMaps used in CLJDict, and the speed improvement is very impressive. To
>> see the scalability of the different approaches, I graphed with various
>> numbers of threads and read percentages:
>> http://github.com/stuhood/clojure-conc/tree/master/results
>>
>> Two conclusions:
>>  1. The overhead for STM with low contention is very reasonable,
>>  2. Optimism + MVCC + persistence fall down when faced with a majority of
>> writes. (see the 100% write case in the writes graph.)
>>
>> Thanks,
>> Stu
>>
>>
>> On Thu, Jan 15, 2009 at 2:52 PM, Christian Vest Hansen
>> <karmazi...@gmail.com> wrote:
>>>
>>> On Thu, Jan 15, 2009 at 8:47 PM, Christian Vest Hansen
>>> <karmazi...@gmail.com> wrote:
>>> > On Thu, Jan 15, 2009 at 8:35 PM, Mark H. <mark.hoem...@gmail.com>
>>> > wrote:
>>> >> On Jan 15, 1:38 am, stuhood <stuh...@gmail.com> wrote:
>>> >>> The benchmark contains 4 bi-directional dictionary implementations:
>>> ...
>>> >>
>>> >> Doesn't Java already have a more optimized thread-safe hash table that
>>> >> works by locking individual buckets, rather than the whole table?
>>> >> Maybe I'm just confused ;-P
>>>
>>> Ah! but a mere hash table is not bi-directional :-)
>>>
>>>
>>> --
>>> Venlig hilsen / Kind regards,
>>> Christian Vest Hansen.
>>>
>>>
>>
>>
>> >
>>
>
>
>
> --
> Venlig hilsen / Kind regards,
> Christian Vest Hansen.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to