I have been reading myself up on Clojure concurrency, starting at [1]. In [2] I read that
The Clojure STM uses multiversion concurrency control with adaptive history > queues for snapshot isolation, and provides a distinct commute operation but it still needs some explanation to me. Software transactional memory (STM) is described ok. But the "adaptive history queues" looks like implementation. In ADA, tasks on rendezvous queue up (so the Ravenscar high security profile prohibits them because they are non-deterministic). In Go goroutines on selective choice's select are queued (also nondeterministic). In occam the there is no such queue on the ALT. How is the Clojure queue, and what does it contain? I see that exchanging data between Clojure concurrent functions (threads?) described. But I haven't discovered how a "thread" that succeeds in writing, followed by a successful write immediately after by another thread - is "signalled" to the first thread? Is there any *wait* type of mechanism? If a write fails and there is a retry, what's the limit of retries, is there a yield in between, and in case, how is this entry queued? Is it correct to say that *never to block means never to be 100% sure that a transaction succeeds at first attempt*? [3] states on commute that "Thus fun should be commutative, or, failing that, you must accept last-one-in-wins behavior. commute allows for more concurrency than ref-set.". What's the metric of concurrency? No, little, some, more, much, max? I would have more questions, but they will come. I plan to blog about these matters at [4]. It's a do-for-fun only blog, with no money or ads involved. I try to read myself up via atomic to several other concurrency models than CSP, which is flowing in my veins the last 25 years. Øyvind Teig, Trondheim, Norway [1] - http://clojure.org/concurrent_programming [2] - http://clojure.org/Refs [3] - http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/commute [4] - http://www.teigfam.net/oyvind/home/technology/ -- 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 Note that posts from new members are moderated - please be patient with your first post. 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.