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 -~----------~----~----~----~------~----~------~--~---