<?xml version="1.0" encoding="UTF-8"?>
 <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://pinboard.in">
    <title>Pinboard (jm)</title>
    <link>https://pinboard.in/u:jm/public/</link>
    <description>recent bookmarks from jm</description>
    <items>
      <rdf:Seq>	<rdf:li rdf:resource="https://mcyoung.xyz/2023/03/29/rseq-checkout/"/>
	<rdf:li rdf:resource="https://github.com/ericvolp12/atomic-bloom"/>
	<rdf:li rdf:resource="https://sqlite.org/wal.html"/>
	<rdf:li rdf:resource="https://songlh.github.io/paper/go-study.pdf"/>
	<rdf:li rdf:resource="https://blog.acolyer.org/2016/11/02/memc3-compact-and-concurrent-memcache-with-dumber-caching-and-smarter-hashing/"/>
	<rdf:li rdf:resource="http://www.perfdynamics.com/Manifesto/USLscalability.html"/>
	<rdf:li rdf:resource="https://github.com/ztellman/dirigiste"/>
	<rdf:li rdf:resource="https://github.com/conversant/disruptor"/>
	<rdf:li rdf:resource="https://www.voxxed.com/blog/2015/12/importance-tuning-thread-pools/"/>
	<rdf:li rdf:resource="http://belliottsmith.com/injector/"/>
	<rdf:li rdf:resource="http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html"/>
	<rdf:li rdf:resource="https://github.com/ben-manes/caffeine"/>
	<rdf:li rdf:resource="https://github.com/JCTools/JCTools"/>
	<rdf:li rdf:resource="http://www.xaprb.com/blog/2014/12/08/eventual-consistency-simpler-than-mvcc/"/>
	<rdf:li rdf:resource="http://martin.kleppmann.com/2014/11/25/hermitage-testing-the-i-in-acid.html"/>
	<rdf:li rdf:resource="http://www.nurkiewicz.com/2014/11/executorservice-10-tips-and-tricks.html"/>
	<rdf:li rdf:resource="http://stuff-gil-says.blogspot.ie/2014/11/writerreaderphaser-story-about-new.html"/>
	<rdf:li rdf:resource="http://sourceforge.net/projects/ccfreaks/files/papers/LeftRight/leftright-extended.pdf"/>
	<rdf:li rdf:resource="http://googletesting.blogspot.ie/2014/06/threadsanitizer-slaughtering-data-races.html"/>
	<rdf:li rdf:resource="http://hackingdistributed.com/2014/06/18/hyperleveldb-improvements/"/>
	<rdf:li rdf:resource="https://news.ycombinator.com/item?id=7711974"/>
	<rdf:li rdf:resource="http://psy-lob-saw.blogspot.ie/2014/04/notes-on-concurrent-ring-buffer-queue.html"/>
	<rdf:li rdf:resource="http://www.bailis.org/blog/scalable-atomic-visibility-with-ramp-transactions/"/>
	<rdf:li rdf:resource="http://www.cs.cmu.edu/~hl/papers/mica-nsdi2014.pdf"/>
	<rdf:li rdf:resource="http://www.elevatedcode.com/2013/05/07/flock-for-cron-jobs.html"/>
	<rdf:li rdf:resource="http://www.javaspecialists.eu/archive/Issue215.html"/>
	<rdf:li rdf:resource="http://psy-lob-saw.blogspot.ie/2013/10/spsc-revisited-part-iii-fastflow-sparse.html"/>
	<rdf:li rdf:resource="https://issues.apache.org/jira/browse/CASSANDRA-5582"/>
	<rdf:li rdf:resource="http://mechanical-sympathy.blogspot.co.uk/2013/08/lock-based-vs-lock-free-concurrent.html"/>
	<rdf:li rdf:resource="http://psy-lob-saw.blogspot.ie/2013/06/java-concurrent-counters-by-numbers.html"/>
	<rdf:li rdf:resource="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html"/>
	<rdf:li rdf:resource="http://pagesperso-systeme.lip6.fr/Marc.Shapiro/papers/RR-6956.pdf"/>
	<rdf:li rdf:resource="http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_Java.pdf"/>
	<rdf:li rdf:resource="http://brooker.co.za/blog/2012/09/10/volatile.html"/>
	<rdf:li rdf:resource="http://stackoverflow.com/questions/14010906/given-that-hashmaps-in-jdk1-6-and-above-cause-problems-with-multi-threading-how"/>
	<rdf:li rdf:resource="http://www.reddit.com/r/programming/comments/164yjy/a_nonblocking_hashtable_by_dr_cliff_click/"/>
	<rdf:li rdf:resource="http://jeremymanson.blogspot.com/2011/04/cliff-click-in-jvm-does-what.html"/>
	<rdf:li rdf:resource="http://mechanical-sympathy.blogspot.com/2011/07/memory-barriersfences.html"/>
	<rdf:li rdf:resource="http://www.azulsystems.com/events/javaone_2008/2008_CodingNonBlock.pdf"/>
	<rdf:li rdf:resource="http://edwwang.com/blog/2012/02/10/concurrent-hashmap-benchmark/"/>
	<rdf:li rdf:resource="http://mechanical-sympathy.blogspot.ie/2011/11/locks-condition-variables-latency.html"/>
	<rdf:li rdf:resource="http://mechanical-sympathy.blogspot.ie/2011/09/single-writer-principle.html"/>
	<rdf:li rdf:resource="http://docs.guava-libraries.googlecode.com/git-history/v13.0.1/javadoc/com/google/common/util/concurrent/Striped.html"/>
	<rdf:li rdf:resource="http://www.1024cores.net/home"/>
	<rdf:li rdf:resource="http://highscalability.com/blog/2012/3/6/ask-for-forgiveness-programming-or-how-well-program-1000-cor.html"/>
	<rdf:li rdf:resource="http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html"/>
	<rdf:li rdf:resource="http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work"/>
	<rdf:li rdf:resource="http://akka.io/"/>
	<rdf:li rdf:resource="http://mdm.berlios.de/usage.html"/>
	<rdf:li rdf:resource="http://savannah.gnu.org/projects/parallel"/>
	<rdf:li rdf:resource="http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/"/>
	<rdf:li rdf:resource="http://www.zlib.net/pigz/"/>
      </rdf:Seq>
    </items>
  </channel><item rdf:about="https://mcyoung.xyz/2023/03/29/rseq-checkout/">
    <title>Atomicless Concurrency</title>
    <dc:date>2025-05-19T09:03:07+00:00</dc:date>
    <link>https://mcyoung.xyz/2023/03/29/rseq-checkout/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[CPU-local (not just thread-local) concurrency in Linux using rseq(2) [via Tony Finch]]]></description>
<dc:subject>via:fanf linux concurrency multiprocessing rseq cpu-local</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:d8ecd0840341/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:fanf"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multiprocessing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rseq"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cpu-local"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/ericvolp12/atomic-bloom">
    <title>Atomic Bloom filters</title>
    <dc:date>2025-05-01T12:09:01+00:00</dc:date>
    <link>https://github.com/ericvolp12/atomic-bloom</link>
    <dc:creator>jm</dc:creator><description><![CDATA[a fork of Go's "Bits and Blooms" library that uses an alternative backing bitset based on Go's sync/atomic.Int64 rather than a bare slice of integers. This allows for concurrent addition and testing of filters without creating memory safety issues or race conditions by leveraging hardware support for atomic Load and Or operations on Int64s.

Jaz from Bluesky notes: "Benchmarked this thing with a realistic read/write load in a test and high concurrency (10k adds/sec on one routine, 7 additional concurrent routines testing as fast as possible), vs. a naive RWMutex implementation on a 8c16t test box, it was ~14x faster (~14M tests/sec)"]]></description>
<dc:subject>atomic concurrency data-structures bloom-filters performance bluesky sets golang</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:2ebe9e635c87/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:atomic"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bloom-filters"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bluesky"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sets"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:golang"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://sqlite.org/wal.html">
    <title>SQLite has Write-Ahead Logging</title>
    <dc:date>2023-06-23T09:28:05+00:00</dc:date>
    <link>https://sqlite.org/wal.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[TIL!

Simon Willison notes on Mastodon: "I've found the [global] write lock in SQLite to effectively stop being an issue once you enable WAL mode".

I did not know that SQLite had a write-ahead log mode.  Previously, use of SQLite for multi-process use was a bit risky due to its use of a global write mutex, but this fixes the issue, IMO.

Simon's benchmarking tests with Django: https://simonwillison.net/2022/Oct/23/datasette-gunicorn/

"TL;DR version of the results: SQLite in its default “journal” mode starts returning “database locked” errors pretty quickly as the [test] write load increases. But if you switch to “wal” mode those errors straight up vanish! I was expecting WAL mode to improve things, but I thought I’d still be able to hit errors even with it enabled. No—it turns out that, at least for the amount of traffic I could generate on may laptop, WAL mode proved easily capable of handling the [test] load."

'WAL journal mode supports one writer and many readers at the same time. A second writer will have to wait until the first write transaction is committed or rolled back.'

Significant advantages (according to the SQLite docs):

- WAL is significantly faster in most scenarios.

- WAL provides more concurrency as readers do not block writers and a writer does not block readers. Reading and writing can proceed concurrently.

- Disk I/O operations tends to be more sequential using WAL.

- WAL uses many fewer fsync() operations and is thus less vulnerable to problems on systems where the fsync() system call is broken.

The WAL is easy to enable: simply run `sqlite-utils enable-wal db.sqlite3` on an existing SQLite database file with no running users.
]]></description>
<dc:subject>databases performance unix sqlite wordpress django wal concurrency</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:a64af67329c6/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:unix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sqlite"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:wordpress"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:django"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:wal"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://songlh.github.io/paper/go-study.pdf">
    <title>&quot;Understanding Real-World Concurrency Bugs in Go&quot; (paper)</title>
    <dc:date>2019-03-02T21:21:02+00:00</dc:date>
    <link>https://songlh.github.io/paper/go-study.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA['Go advocates for the usage of message passing as the means of inter-thread communication and provides several new concurrency mechanisms and libraries to ease multi-threading programming. It is important to understand the implication of these new proposals and the comparison of message passing and shared memory synchronization in terms of program errors, or bugs. Unfortunately, as far as we know, there has been no study on Go’s concurrency bugs. In this paper, we perform the first systematic study on concurrency bugs in real Go programs. We studied six popular Go software including Docker, Kubernetes, and gRPC.

We analyzed 171 concurrency bugs in total, with more than half of them caused by non-traditional, Go-specific problems. Apart from root causes of these bugs, we also studied their fixes, performed experiments to reproduce them, and evaluated them with two publicly-available Go bug detectors.
Overall, our study provides a better understanding on Go’s concurrency models and can guide future researchers and practitioners in writing better, more reliable Go software and in developing debugging and diagnosis tools for Go.'

(via Bill de hOra)]]></description>
<dc:subject>via:dehora golang go concurrency bugs lint synchronization threading threads bug-detection</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:e389d307df9b/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:dehora"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:golang"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:go"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lint"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:synchronization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bug-detection"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://blog.acolyer.org/2016/11/02/memc3-compact-and-concurrent-memcache-with-dumber-caching-and-smarter-hashing/">
    <title>MemC3: Compact and concurrent Memcache with dumber caching and smarter hashing</title>
    <dc:date>2016-11-02T17:53:21+00:00</dc:date>
    <link>https://blog.acolyer.org/2016/11/02/memc3-compact-and-concurrent-memcache-with-dumber-caching-and-smarter-hashing/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>An improved hashing algorithm called optimistic cuckoo hashing, and a CLOCK-based eviction algorithm that works in tandem with it. They are evaluated in the context of Memcached, where combined they give up to a 30% memory usage reduction and up to a 3x improvement in queries per second as compared to the default Memcached implementation on read-heavy workloads with small objects (as is typified by Facebook workloads).</blockquote>

]]></description>
<dc:subject>memcached performance key-value-stores storage databases cuckoo-hashing algorithms concurrency caching cache-eviction memory throughput</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:db93b3a89ad7/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:key-value-stores"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cuckoo-hashing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cache-eviction"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:throughput"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.perfdynamics.com/Manifesto/USLscalability.html">
    <title>How to Quantify Scalability</title>
    <dc:date>2016-09-26T10:00:52+00:00</dc:date>
    <link>http://www.perfdynamics.com/Manifesto/USLscalability.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[good page on the Universal Scalability Law and how to apply it]]></description>
<dc:subject>usl performance scalability concurrency capacity measurement excel equations metrics</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:ab7e86dd0bb0/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:usl"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:capacity"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:measurement"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:excel"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:equations"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:metrics"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/ztellman/dirigiste">
    <title>ztellman/dirigiste</title>
    <dc:date>2016-06-01T11:55:13+00:00</dc:date>
    <link>https://github.com/ztellman/dirigiste</link>
    <dc:creator>jm</dc:creator><description><![CDATA['centrally-planned object and thread pools' for java.

'In the default JVM thread pools, once a thread is created it will only be retired when it hasn't performed a task in the last minute. In practice, this means that there are as many threads as the peak historical number of concurrent tasks handled by the pool, forever. These thread pools are also poorly instrumented, making it difficult to tune their latency or throughput.  Dirigiste provides a fast, richly instrumented version of a java.util.concurrent.ExecutorService, and provides a means to feed that instrumentation into a control mechanism that can grow or shrink the pool as needed. Default implementations that optimize the pool size for thread utilization are provided.  It also provides an object pool mechanism that uses a similar feedback mechanism to resize itself, and is significantly simpler than the Apache Commons object pool implementation.'

Great metric support, too.]]></description>
<dc:subject>async jvm dirigiste java threadpools concurrency utilization capacity executors object-pools object-pooling latency</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:5092c7f0c12e/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:async"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:dirigiste"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threadpools"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:utilization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:capacity"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:executors"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:object-pools"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:object-pooling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/conversant/disruptor">
    <title>Conversant ConcurrentQueue and Disruptor BlockingQueue</title>
    <dc:date>2016-03-07T11:24:20+00:00</dc:date>
    <link>https://github.com/conversant/disruptor</link>
    <dc:creator>jm</dc:creator><description><![CDATA['Disruptor is the highest performing intra-thread transfer mechanism available in Java. Conversant Disruptor is the highest performing implementation of this type of ring buffer queue because it has almost no overhead and it exploits a particularly simple design.

Conversant has been using this in production since 2012 and the performance is excellent. The BlockingQueue implementation is very stable, although we continue to tune and improve it.  The latest release, 1.2.4, is 100% production ready.

Although we have been working on it for a long time, we decided to open source our BlockingQueue this year to contribute something back to the community. ... its a drop in for BlockingQueue, so its a very easy test.  Conversant Disruptor will crush ArrayBlockingQueue and LinkedTransferQueue for thread to thread transfers.    

In our system, we noticed a 10-20% reduction in overall system load and latency when we introduced it.']]></description>
<dc:subject>disruptor blocking-queues queues queueing data-structures algorithms java conversant concurrency performance</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:502056282b58/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:disruptor"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:blocking-queues"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queues"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queueing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:conversant"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://www.voxxed.com/blog/2015/12/importance-tuning-thread-pools/">
    <title>The Importance of Tuning Your Thread Pools</title>
    <dc:date>2016-01-04T10:42:16+00:00</dc:date>
    <link>https://www.voxxed.com/blog/2015/12/importance-tuning-thread-pools/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Excellent blog post on thread pools, backpressure, Little's Law, and other Hystrix-related topics (PS: use Hystrix)]]></description>
<dc:subject>hystrix threadpools concurrency java jvm backpressure littles-law capacity</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:d8e4a0101363/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hystrix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threadpools"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:backpressure"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:littles-law"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:capacity"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://belliottsmith.com/injector/">
    <title>The Injector: A new Executor for Java</title>
    <dc:date>2015-05-08T16:33:16+00:00</dc:date>
    <link>http://belliottsmith.com/injector/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>This honestly fits a narrow niche, but one that is gaining in popularity. If your messages take > 100μs to process, or your worker threads are consistently saturated, the standard ThreadPoolExecutor is likely perfectly adequate for your needs. If, on the other hand, you’re able to engineer your system to operate with one application thread per physical core you are probably better off looking at an approach like the LMAX Disruptor. However, if you fall in the crack in between these two scenarios, or are seeing a significant portion of time spent in futex calls and need a drop in ExecutorService to take the edge off, the injector may well be worth a look.
</blockquote>

]]></description>
<dc:subject>performance java executor concurrency disruptor algorithms coding threads threadpool injector</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:b2f16d258d53/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:executor"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:disruptor"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threadpool"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:injector"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html">
    <title>Paper review: &quot;Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems&quot;</title>
    <dc:date>2015-03-27T09:36:04+00:00</dc:date>
    <link>http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Race conditions, and errors at startup, seem to be particularly problematic]]></description>
<dc:subject>race-conditions startup bugs failure fault-tolerance hbase redis reliability ops papers concurrency exception-handling cassandra hdfs mapreduce</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:3dd7b48e5fed/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:race-conditions"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:startup"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failure"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fault-tolerance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hbase"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reliability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:papers"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:exception-handling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cassandra"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hdfs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mapreduce"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/ben-manes/caffeine">
    <title>ben-manes/caffeine</title>
    <dc:date>2015-03-24T11:32:35+00:00</dc:date>
    <link>https://github.com/ben-manes/caffeine</link>
    <dc:creator>jm</dc:creator><description><![CDATA['Caffeine is a Java 8 based concurrency library that provides specialized data structures, such as a high performance cache.']]></description>
<dc:subject>cache java8 java guava caching concurrency data-structures coding</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:2a3239aaf088/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java8"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:guava"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/JCTools/JCTools">
    <title>JCTools</title>
    <dc:date>2015-01-25T08:50:22+00:00</dc:date>
    <link>https://github.com/JCTools/JCTools</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>Java Concurrency Tools for the JVM. This project aims to offer some concurrent data structures currently missing from the JDK:

Bounded lock free queues
SPSC/MPSC/SPMC/MPMC variations for concurrent queues
Alternative interfaces for queues (experimental)
Offheap concurrent ring buffer for ITC/IPC purposes (experimental)
Executor (planned)</blockquote>

]]></description>
<dc:subject>concurrency lock-free data-structures queues jvm java</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:48920e47e7f3/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lock-free"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queues"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.xaprb.com/blog/2014/12/08/eventual-consistency-simpler-than-mvcc/">
    <title>If Eventual Consistency Seems Hard, Wait Till You Try MVCC</title>
    <dc:date>2014-12-09T16:42:44+00:00</dc:date>
    <link>http://www.xaprb.com/blog/2014/12/08/eventual-consistency-simpler-than-mvcc/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[ex-Percona MySQL wizard Baron Schwartz, noting that MVCC as implemented in common SQL databases is not all that simple or reliable compared to big bad NoSQL Eventual Consistency:
 
<blockquote>Since I am not ready to assert that there’s a distributed system I know to be better and simpler than eventually consistent datastores, and since I certainly know that InnoDB’s MVCC implementation is full of complexities, for right now I am probably in the same position most of my readers are: the two viable choices seem to be single-node MVCC and multi-node eventual consistency. And I don’t think MVCC is the simpler paradigm of the two.</blockquote>

]]></description>
<dc:subject>nosql concurrency databases mysql riak voldemort eventual-consistency reliability storage baron-schwartz mvcc innodb postgresql</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:0dddeb567400/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mysql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:riak"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:voldemort"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:eventual-consistency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reliability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:baron-schwartz"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mvcc"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:innodb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:postgresql"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://martin.kleppmann.com/2014/11/25/hermitage-testing-the-i-in-acid.html">
    <title>Hermitage: Testing the &quot;I&quot; in ACID</title>
    <dc:date>2014-11-28T16:53:54+00:00</dc:date>
    <link>http://martin.kleppmann.com/2014/11/25/hermitage-testing-the-i-in-acid.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>[Hermitage is] a test suite for databases which probes for a variety of concurrency issues, and thus allows a fair and accurate comparison of isolation levels. Each test case simulates a particular kind of race condition that can happen when two or more transactions concurrently access the same data. Each test can pass (if the database’s implementation of isolation prevents the race condition from occurring) or fail (if the race condition does occur).</blockquote>

]]></description>
<dc:subject>acid architecture concurrency databases nosql</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:edfb2ab71a2b/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:acid"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.nurkiewicz.com/2014/11/executorservice-10-tips-and-tricks.html">
    <title>ExecutorService - 10 tips and tricks</title>
    <dc:date>2014-11-25T12:28:16+00:00</dc:date>
    <link>http://www.nurkiewicz.com/2014/11/executorservice-10-tips-and-tricks.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Excellent advice from Tomasz Nurkiewicz' blog for anyone using java.util.concurrent.ExecutorService regularly.  The whole blog is full of great posts btw]]></description>
<dc:subject>concurrency java jvm threading threads executors coding</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:35ca20533835/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:executors"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://stuff-gil-says.blogspot.ie/2014/11/writerreaderphaser-story-about-new.html">
    <title>WriterReaderPhaser</title>
    <dc:date>2014-11-17T12:17:49+00:00</dc:date>
    <link>http://stuff-gil-says.blogspot.ie/2014/11/writerreaderphaser-story-about-new.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[A nice new concurrency primitive from Gil Tene:

<blockquote>Have you ever had a need for logging or analyzing data that is actively being updated? Have you ever wanted to do that without stalling the writers (recorders) in any way? If so, then WriterReaderPhaser is for you.   I'm not talking about logging messages or text lines here.  I'm talking about data.  Data larger than one word of memory.  Data that holds actual interesting state. Data that keeps being updated, but needs to be viewed in a stable and coherent way for analysis or logging.  Data like frame buffers. Data like histograms.  Data like usage counts. Data that changes.</blockquote>

see also Left-Right: http://concurrencyfreaks.blogspot.ie/2013/12/left-right-concurrency-control.html]]></description>
<dc:subject>phasers data-structures concurrency primitives algorithms performance wait-free</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:919ce0908e15/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:phasers"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:primitives"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:wait-free"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://sourceforge.net/projects/ccfreaks/files/papers/LeftRight/leftright-extended.pdf">
    <title>&quot;Left-Right: A Concurrency Control Technique with Wait-Free Population Oblivious Reads&quot; [pdf]</title>
    <dc:date>2014-09-17T14:29:55+00:00</dc:date>
    <link>http://sourceforge.net/projects/ccfreaks/files/papers/LeftRight/leftright-extended.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA['In this paper, we describe a generic concurrency control technique with Blocking write operations and Wait-Free Population Oblivious read operations, which we named the Left-Right technique. It is of particular interest for real-time applications with dedicated Reader threads, due to its wait-free property that gives strong latency guarantees and, in addition, there is no need for automatic Garbage Collection.
The Left-Right pattern can be applied to any data structure, allowing concurrent access to it similarly to a Reader-Writer lock, but in a non-blocking manner for reads. We present several variations of the Left-Right technique, with different versioning mechanisms and state machines. In addition, we constructed an optimistic approach that can reduce synchronization for reads.'

See also http://concurrencyfreaks.blogspot.ie/2013/12/left-right-concurrency-control.html for java implementation code.]]></description>
<dc:subject>left-right concurrency multithreading wait-free blocking realtime gc latency reader-writer locking synchronization java</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:71e20ba2b8b1/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:left-right"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multithreading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:wait-free"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:blocking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:realtime"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gc"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reader-writer"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:synchronization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://googletesting.blogspot.ie/2014/06/threadsanitizer-slaughtering-data-races.html">
    <title>ThreadSanitizer</title>
    <dc:date>2014-06-30T22:03:56+00:00</dc:date>
    <link>http://googletesting.blogspot.ie/2014/06/threadsanitizer-slaughtering-data-races.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Google's purify/valgrind-like concurrency checking tool:

'As a bonus, ThreadSanitizer finds some other types of bugs: thread leaks, deadlocks, incorrect uses of mutexes, malloc calls in signal handlers, and more. It also natively understands atomic operations and thus can find bugs in lock-free algorithms. [...] The tool is supported by both Clang and GCC compilers (only on Linux/Intel64). Using it is very simple: you just need to add a -fsanitize=thread flag during compilation and linking. For Go programs, you simply need to add a -race flag to the go tool (supported on Linux, Mac and Windows).']]></description>
<dc:subject>concurrency bugs valgrind threadsanitizer threading deadlocks mutexes locking synchronization coding testing</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:db1d9b5fef05/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:valgrind"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threadsanitizer"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:deadlocks"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mutexes"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:synchronization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:testing"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://hackingdistributed.com/2014/06/18/hyperleveldb-improvements/">
    <title>Concurrency Improvements in HyperLevelDB</title>
    <dc:date>2014-06-19T15:18:03+00:00</dc:date>
    <link>http://hackingdistributed.com/2014/06/18/hyperleveldb-improvements/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Good-looking benchmark results here from HyperDex

]]></description>
<dc:subject>hyperdex hyperleveldb leveldb rocksdb concurrency lock-free storage persistence</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:8224fb82bc16/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hyperdex"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hyperleveldb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:leveldb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rocksdb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lock-free"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:persistence"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://news.ycombinator.com/item?id=7711974">
    <title>Why Disqus made the Python-&gt;Go switchover</title>
    <dc:date>2014-05-08T13:34:52+00:00</dc:date>
    <link>https://news.ycombinator.com/item?id=7711974</link>
    <dc:creator>jm</dc:creator><description><![CDATA[for their realtime component, from the horse's mouth:

<blockquote>at higher contention, the CPU was choking everything. Switching over to Go removed that contention for us, which was the primary issue that we were seeing.</blockquote>

]]></description>
<dc:subject>python languages concurrency go threading gevent scalability disqus realtime hn</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:7735324765d8/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:python"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:languages"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:go"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gevent"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:disqus"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:realtime"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hn"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://psy-lob-saw.blogspot.ie/2014/04/notes-on-concurrent-ring-buffer-queue.html">
    <title>Notes On Concurrent Ring Buffer Queue Mechanics</title>
    <dc:date>2014-04-22T22:20:43+00:00</dc:date>
    <link>http://psy-lob-saw.blogspot.ie/2014/04/notes-on-concurrent-ring-buffer-queue.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[great notes from Nitsan Wakart, who's been hacking on ringbuffers a lot in JAQ]]></description>
<dc:subject>jaq nitsanw atomic concurrency data-structures ring-buffers queueing queues algorithms</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:ce4599f4a093/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jaq"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nitsanw"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:atomic"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ring-buffers"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queueing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queues"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.bailis.org/blog/scalable-atomic-visibility-with-ramp-transactions/">
    <title>Scalable Atomic Visibility with RAMP Transactions</title>
    <dc:date>2014-04-10T20:55:17+00:00</dc:date>
    <link>http://www.bailis.org/blog/scalable-atomic-visibility-with-ramp-transactions/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Great new distcomp protocol work from Peter Bailis et al:

<blockquote>We’ve developed three new algorithms—called Read Atomic Multi-Partition (RAMP) Transactions—for ensuring atomic visibility in partitioned (sharded) databases: either all of a transaction’s updates are observed, or none are. [...]

How they work: RAMP transactions allow readers and writers to proceed concurrently. Operations race, but readers autonomously detect the races and repair any non-atomic reads. The write protocol ensures readers never stall waiting for writes to arrive.

Why they scale: Clients can’t cause other clients to stall (via synchronization independence) and clients only have to contact the servers responsible for items in their transactions (via partition independence). As a consequence, there’s no mutual exclusion or synchronous coordination across servers.

The end result: RAMP transactions outperform existing approaches across a variety of workloads, and, for a workload of 95% reads, RAMP transactions scale to over 7 million ops/second on 100 servers at less than 5% overhead.</blockquote>

]]></description>
<dc:subject>scale synchronization databases distcomp distributed ramp transactions scalability peter-bailis protocols sharding concurrency atomic partitions</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:bb652343d9e6/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scale"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:synchronization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distcomp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distributed"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ramp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:transactions"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:peter-bailis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:protocols"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sharding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:atomic"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:partitions"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.cs.cmu.edu/~hl/papers/mica-nsdi2014.pdf">
    <title>MICA: A Holistic Approach To Fast In-Memory Key-Value Storage [paper]</title>
    <dc:date>2014-04-09T09:19:24+00:00</dc:date>
    <link>http://www.cs.cmu.edu/~hl/papers/mica-nsdi2014.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Very interesting new approach to building a scalable in-memory K/V store.  As Rajiv Kurian notes on the mechanical-sympathy list:

'The basic idea is that each core is responsible for a portion of the key-space and requests are forwarded to the right core, avoiding multiple-writer scenarios. This is opposed to designs like memcache which uses locks and shared memory.

Some of the things I found interesting: The single writer design is taken to an extreme. Clients assist the partitioning of requests, by calculating hashes before submitting GET requests.  It uses Intel DPDK instead of sockets to forward packets to the right core, without processing the packet on any core. Each core is paired with a dedicated RX/TX queue. The design for a lossy cache is simple but interesting. It does things like replacing a hash slot (instead of chaining) etc. to take advantage of the lossy nature of caches. There is a lossless design too. A bunch of tricks to optimize for memory performance. This includes pre-allocation, design of the hash indexes, prefetching tricks etc. There are some other concurrency tricks that were interesting. Handling dangling pointers was one of them.'

Source code here: https://github.com/efficient/mica]]></description>
<dc:subject>mica in-memory memory ram key-value-stores storage smp dpdk multicore memcached concurrency</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:1b85262ba3f6/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mica"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:in-memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ram"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:key-value-stores"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:smp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:dpdk"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multicore"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.elevatedcode.com/2013/05/07/flock-for-cron-jobs.html">
    <title>Flock for Cron jobs</title>
    <dc:date>2013-12-05T14:04:50+00:00</dc:date>
    <link>http://www.elevatedcode.com/2013/05/07/flock-for-cron-jobs.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[good blog post writing up the 'flock -n -c' trick to ensure single-concurrent-process locking for cron jobs]]></description>
<dc:subject>cron concurrency unix linux flock locking ops</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:1d8eca4336f5/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cron"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:unix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:flock"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.javaspecialists.eu/archive/Issue215.html">
    <title>[JavaSpecialists 215] - StampedLock Idioms</title>
    <dc:date>2013-12-02T23:07:48+00:00</dc:date>
    <link>http://www.javaspecialists.eu/archive/Issue215.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[a demo of Doug Lea's latest concurrent data structure in Java 8]]></description>
<dc:subject>doug-lea concurrency coding java-8 java threads</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:3aa6c6135e23/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:doug-lea"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java-8"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://psy-lob-saw.blogspot.ie/2013/10/spsc-revisited-part-iii-fastflow-sparse.html">
    <title>SPSC revisited part III - FastFlow + Sparse Data</title>
    <dc:date>2013-10-07T09:51:25+00:00</dc:date>
    <link>http://psy-lob-saw.blogspot.ie/2013/10/spsc-revisited-part-iii-fastflow-sparse.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[holy moly.  This is some heavily-optimized mechanical-sympathy Java code.  By using a sparse data structure, cache-aligned fields, and wait-free low-level CAS concurrency primitives via sun.misc.Unsafe, a single-producer/single-consumer queue implementation goes pretty damn fast compared to the current state of the art]]></description>
<dc:subject>nitsanw optimization concurrency java jvm cas spsc queues data-structures algorithms</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:76f60b5fe219/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nitsanw"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:optimization"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cas"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:spsc"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queues"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://issues.apache.org/jira/browse/CASSANDRA-5582">
    <title>[#CASSANDRA-5582] Replace CustomHsHaServer with better optimized solution based on LMAX Disruptor</title>
    <dc:date>2013-09-03T22:29:45+00:00</dc:date>
    <link>https://issues.apache.org/jira/browse/CASSANDRA-5582</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Disruptor: decimating P99s since 2011]]></description>
<dc:subject>disruptor cassandra java p99 latency speed performance concurrency via:kellabyte</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:70d101c721e7/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:disruptor"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cassandra"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:p99"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:speed"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:kellabyte"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://mechanical-sympathy.blogspot.co.uk/2013/08/lock-based-vs-lock-free-concurrent.html">
    <title>Lock-Based vs Lock-Free Concurrent Algorithms</title>
    <dc:date>2013-08-27T13:44:58+00:00</dc:date>
    <link>http://mechanical-sympathy.blogspot.co.uk/2013/08/lock-based-vs-lock-free-concurrent.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[An excellent post from Martin Thompson showing a new JSR166 concurrency primitive, StampedLock, compared against a number of alternatives in a simple microbenchmark.
The most interesting thing for me is how much the lock-free, AtomicReference.compareAndSet()-based approach blows away all the lock-based approaches -- even in the 1-reader-1-writer case.  Its code is extremely simple, too: https://github.com/mjpt777/rw-concurrency/blob/master/src/LockFreeSpaceship.java]]></description>
<dc:subject>concurrency java threads lock-free locking compare-and-set cas atomic jsr166 microbenchmarks performance</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:bdebec8819d5/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lock-free"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:compare-and-set"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cas"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:atomic"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jsr166"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:microbenchmarks"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://psy-lob-saw.blogspot.ie/2013/06/java-concurrent-counters-by-numbers.html">
    <title>Java Concurrent Counters By Numbers</title>
    <dc:date>2013-06-21T08:58:54+00:00</dc:date>
    <link>http://psy-lob-saw.blogspot.ie/2013/06/java-concurrent-counters-by-numbers.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[threadsafe counters in the JVM compared.  AtomicLong, Doug Lea's LongAdder, a ThreadLocal counter, and a field-on-the-Thread-object counter int (via Darach Ennis).  Nitsan's posts on concurrency are fantastic]]></description>
<dc:subject>counters concurrency threads java jvm atomic</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:ede985f5ed91/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:counters"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:atomic"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html">
    <title>Functional Reactive Programming in the Netflix API with RxJava</title>
    <dc:date>2013-04-25T13:53:04+00:00</dc:date>
    <link>http://techblog.netflix.com/2013/02/rxjava-netflix-api.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Hmm, this seems nifty as a compositional building block for Java code to enable concurrency without thread-safety and sync problems.

<blockquote>Functional reactive programming offers efficient execution and composition by providing a collection of operators capable of filtering, selecting, transforming, combining and composing Observable's.

The Observable data type can be thought of as a "push" equivalent to Iterable which is "pull". With an Iterable, the consumer pulls values from the producer and the thread blocks until those values arrive. By contrast with the Observable type, the producer pushes values to the consumer whenever values are available. This approach is more flexible, because values can arrive synchronously or asynchronously.</blockquote>

]]></description>
<dc:subject>concurrency java jvm threads thread-safety coding rx frp fp functional-programming reactive functional async observable</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:553199ccea41/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threads"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:thread-safety"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rx"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:frp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:functional-programming"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reactive"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:functional"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:async"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:observable"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://pagesperso-systeme.lip6.fr/Marc.Shapiro/papers/RR-6956.pdf">
    <title>CRDTs - Commutative Replicated Data Types [pdf]</title>
    <dc:date>2013-04-03T17:06:34+00:00</dc:date>
    <link>http://pagesperso-systeme.lip6.fr/Marc.Shapiro/papers/RR-6956.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>
Shared read-only data is easy to scale by using well-understood replication techniques. However, sharing mutable data at a large scale is a dicult problem, because of the CAP impossibility result [5]. Two approaches dominate in practice. One ensures scalability by giving up consistency guarantees, for instance using the Last-Writer-Wins (LWW) approach [7]. The alternative guarantees consistency by serialising all updates, which does not scale beyond a small cluster [12]. Optimistic replication allows replicas to diverge, eventually resolving conflicts either by LWW-like methods or by serialisation [11].

In some (limited) cases, a radical simplication is possible. If concurrent updates to some datum commute, and all of its replicas execute all updates in causal order, then the replicas converge.1 We call this a Commutative Replicated Data Type (CRDT). The CRDT approach ensures that there are no conflicts, hence, no need for consensus-based concurrency control. CRDTs are not a universal solution, but, perhaps surprisingly, we were able to design highly useful CRDTs. This new research direction is promising as it ensures consistency in the large scale at a low cost, at least for some applications.
</blockquote>
]]></description>
<dc:subject>consistency algorithms concurrency crdts distcomp data</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:d78072311d88/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:consistency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:crdts"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distcomp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_Java.pdf">
    <title>JPL Institutional Coding Standard for the Java Programming Language</title>
    <dc:date>2013-03-25T11:26:31+00:00</dc:date>
    <link>http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_Java.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA[From JPL's Laboratory for Reliable Software (LaRS).  Great reference; there's some really useful recommendations here, and good explanations of familiar ones like "prefer composition over inheritance".  Many are supported by FindBugs, too.

Here's the full list:

<blockquote>
compile with checks turned on;
apply static analysis;
document public elements;
write unit tests;
use the standard naming conventions;
do not override field or class names;
make imports explicit;
do not have cyclic package and class dependencies;
obey the contract for equals();
define both equals() and hashCode();
define equals when adding fields;
define equals with parameter type Object;
do not use finalizers;
do not implement the Cloneable interface;
do not call nonfinal methods in constructors;
select composition over inheritance;
make fields private;
do not use static mutable fields;
declare immutable fields final;
initialize fields before use;
use assertions;
use annotations;
restrict method overloading;
do not assign to parameters;
do not return null arrays or collections;
do not call System.exit;
have one concept per line;
use braces in control structures;
do not have empty blocks;
use breaks in switch statements;
end switch statements with default;
terminate if-else-if with else;
restrict side effects in expressions;
use named constants for non-trivial literals;
make operator precedence explicit;
do not use reference equality;
use only short-circuit logic operators;
do not use octal values;
do not use floating point equality;
use one result type in conditional expressions;
do not use string concatenation operator in loops;
do not drop exceptions;
do not abruptly exit a finally block;
use generics;
use interfaces as types when available;
use primitive types;
do not remove literals from collections;
restrict numeric conversions;
program against data races;
program against deadlocks;
do not rely on the scheduler for synchronization;
wait and notify safely;
reduce code complexity
</blockquote>]]></description>
<dc:subject>nasa java reference guidelines coding-standards jpl reliability software coding oo concurrency findbugs bugs</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:5892be45c902/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nasa"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reference"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:guidelines"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding-standards"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jpl"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reliability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:software"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:oo"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:findbugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://brooker.co.za/blog/2012/09/10/volatile.html">
    <title>Are volatile reads really free?</title>
    <dc:date>2013-02-26T17:06:21+00:00</dc:date>
    <link>http://brooker.co.za/blog/2012/09/10/volatile.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Marc Brooker with some good test data:

<blockquote>It appears as though reads to volatile variables are not free in Java on x86, or at least on the tested setup. It's true that the difference isn't so huge (especially for the read-only case) that it'll make a difference in any but the more performance sensitive case, but that's a different statement from free.</blockquote>

]]></description>
<dc:subject>volatile concurrency jvm performance java marc-brooker</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:52cbaf6b95b9/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:volatile"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:marc-brooker"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://stackoverflow.com/questions/14010906/given-that-hashmaps-in-jdk1-6-and-above-cause-problems-with-multi-threading-how">
    <title>java - Given that HashMaps in jdk1.6 and above cause problems with multi-threading, how should I fix my code - Stack Overflow</title>
    <dc:date>2013-02-01T11:49:23+00:00</dc:date>
    <link>http://stackoverflow.com/questions/14010906/given-that-hashmaps-in-jdk1-6-and-above-cause-problems-with-multi-threading-how</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Massive Java concurrency fail in recent 1.6 and 1.7 JDK releases -- the java.util.HashMap type now spin-locks on an AtomicLong in its constructor.

Here's the response from the author: 'I'll acknowledge right up front that the initialization of hashSeed is a bottleneck but it is not one we expected to be a problem since it only happens once per Hash Map instance. For this code to be a bottleneck you would have to be creating hundreds or thousands of hash maps per second. This is certainly not typical. Is there really a valid reason for your application to be doing this? How long do these hash maps live?'

Oh dear.  Assumptions of "typical" like this are not how you design a fundamental data structure.  fail.   For now there is a hacky reflection-based workaround, but this is lame and needs to be fixed as soon as possible. (Via cscotta)]]></description>
<dc:subject>java hashmap concurrency bugs fail security hashing jdk via:cscotta</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:8b7f56ad583d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashmap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fail"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:security"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jdk"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:cscotta"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.reddit.com/r/programming/comments/164yjy/a_nonblocking_hashtable_by_dr_cliff_click/">
    <title>A Non-Blocking HashTable by Dr. Cliff Click : programming</title>
    <dc:date>2013-01-08T22:31:34+00:00</dc:date>
    <link>http://www.reddit.com/r/programming/comments/164yjy/a_nonblocking_hashtable_by_dr_cliff_click/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Proggit discovers the NonBlockingHashMap. This comment from Boundary's cscotta is particularly interesting: "The code is intricate and curiously-formatted, but NBHM is quite excellent. The majority of our analytics platform is backed by NBHMs updated rapidly in parallel. Cliff's a great, friendly, approachable guy; if you have any specific questions about the approaches or implementation, he may be happy to answer."]]></description>
<dc:subject>data-structures algorithms non-blocking concurrency threading multicore cliff-click azul maps java boundary</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:d2882c65989d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:non-blocking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multicore"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cliff-click"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:azul"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:maps"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:boundary"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://jeremymanson.blogspot.com/2011/04/cliff-click-in-jvm-does-what.html">
    <title>Cliff Click in &quot;A JVM Does What?&quot;</title>
    <dc:date>2012-12-17T21:43:25+00:00</dc:date>
    <link>http://jeremymanson.blogspot.com/2011/04/cliff-click-in-jvm-does-what.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[interesting YouTubed presentation from Azul's Cliff Click on some java/JVM innards]]></description>
<dc:subject>presentation concurrency jvm video java youtube cliff-click</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:1c8bbb3bbf5d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:presentation"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:video"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:youtube"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cliff-click"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://mechanical-sympathy.blogspot.com/2011/07/memory-barriersfences.html">
    <title>Memory Barriers/Fences</title>
    <dc:date>2012-11-24T21:39:32+00:00</dc:date>
    <link>http://mechanical-sympathy.blogspot.com/2011/07/memory-barriersfences.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Martin Thompson with a good description of the x86 memory barrier model and how it interacts with Java's JSR-133 memory model]]></description>
<dc:subject>architecture hardware programming java concurrency volatile jsr-133</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:b161ec6482e6/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hardware"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:programming"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:volatile"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jsr-133"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.azulsystems.com/events/javaone_2008/2008_CodingNonBlock.pdf">
    <title>Cliff Click's 2008 JavaOne talk about the NonBlockingHashTable</title>
    <dc:date>2012-10-05T23:22:21+00:00</dc:date>
    <link>http://www.azulsystems.com/events/javaone_2008/2008_CodingNonBlock.pdf</link>
    <dc:creator>jm</dc:creator><description><![CDATA[I'm a bit late to this data structure -- highly scalable, nearly lock-free, benchmarks very well (except with the G1 GC): http://edwwang.com/blog/2012/02/10/concurrent-hashmap-benchmark/ .  

Having said that, it doesn't cope well with frequently-changing unique keys: http://sourceforge.net/tracker/?func=detail&aid=3563980&group_id=194172&atid=948362 .

More background at: http://www.azulsystems.com/blog/cliff/2007-03-26-non-blocking-hashtable and http://www.azulsystems.com/blog/cliff/2007-04-01-non-blocking-hashtable-part-2

This was used in Cassandra for a while, although I think the above bug may have caused its removal?]]></description>
<dc:subject>nonblockinghashtable data-structures hashmap concurrency scaling java jvm</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:7284343ec731/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nonblockinghashtable"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashmap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scaling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://edwwang.com/blog/2012/02/10/concurrent-hashmap-benchmark/">
    <title>SnapTree benchmarks</title>
    <dc:date>2012-09-12T19:44:41+00:00</dc:date>
    <link>http://edwwang.com/blog/2012/02/10/concurrent-hashmap-benchmark/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[nice concurrent Map data structure for the JVM; beats out ConcurrentHashMap, ConcurrentLinkedHashMap from guava, ConcurrentSkipListMap under both CMS and G1 garbage collectors.]]></description>
<dc:subject>concurrency benchmarks hashmap map data-structures java jvm snaptree</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:df6799ed41e7/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:benchmarks"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashmap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:map"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:snaptree"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://mechanical-sympathy.blogspot.ie/2011/11/locks-condition-variables-latency.html">
    <title>Locks &amp; Condition Variables - Latency Impact</title>
    <dc:date>2012-09-01T08:25:05+00:00</dc:date>
    <link>http://mechanical-sympathy.blogspot.ie/2011/11/locks-condition-variables-latency.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>
Firstly, this is 3 orders of magnitude greater latency than what I illustrated in the previous article using just memory barriers to signal between threads.  This cost comes about because the kernel needs to get involved to arbitrate between the threads for the lock, and then manage the scheduling for the threads to awaken when the condition is signalled.  The one-way latency to signal a change is pretty much the same as what is considered current state of the art for network hops between nodes via a switch.  It is possible to get ~1µs latency with InfiniBand and less than 5µs with 10GigE and user-space IP stacks.

Secondly, the impact is clear when letting the OS choose what CPUs the threads get scheduled on rather than pinning them manually.  I've observed this same issue across many use cases whereby Linux, in default configuration for its scheduler, will greatly impact the performance of a low-latency system by scheduling threads on different cores resulting in cache pollution.   Windows by default seems to make a better job of this.
</blockqote>]]></description>
<dc:subject>locking concurrency java jvm signalling locks linux threading</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:4612004e61bd/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:signalling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locks"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://mechanical-sympathy.blogspot.ie/2011/09/single-writer-principle.html">
    <title>Martin &quot;Disruptor&quot; Thompson's Single Writer Principle</title>
    <dc:date>2012-09-01T08:20:24+00:00</dc:date>
    <link>http://mechanical-sympathy.blogspot.ie/2011/09/single-writer-principle.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Contains these millisecond estimates for highly-contended inter-thread signalling when incrementing a 64-bit counter in java:

<blockquote>One Thread300<br>
One Thread with Memory Barrier4,700<br>
One Thread with CAS5,700<br>
Two Threads with CAS18,000<br>
One Thread with Lock10,000<br>
Two Threads with Lock118,000<br>
</blockquote>

Undoubtedly not realistic for a lot of cases, but it's still useful for order-of-magnitude estimates of locking cost.  Bottom line: don't lock if you can avoid it, even with 'volatile' or AtomicFoo types.]]></description>
<dc:subject>java jvm performance coding concurrency threading cas locking</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:46f185528972/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:threading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cas"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://docs.guava-libraries.googlecode.com/git-history/v13.0.1/javadoc/com/google/common/util/concurrent/Striped.html">
    <title>Striped (Guava: Google Core Libraries for Java 13.0.1 API)</title>
    <dc:date>2012-09-01T07:50:40+00:00</dc:date>
    <link>http://docs.guava-libraries.googlecode.com/git-history/v13.0.1/javadoc/com/google/common/util/concurrent/Striped.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Nice piece of Guava concurrency infrastructure in the latest release: <blockquote>A striped Lock/Semaphore/ReadWriteLock. This offers the underlying lock striping similar to that of ConcurrentHashMap in a reusable form, and extends it for semaphores and read-write locks. Conceptually, lock striping is the technique of dividing a lock into many stripes, increasing the granularity of a single lock and allowing independent operations to lock different stripes and proceed concurrently, instead of creating contention for a single lock.<br>

The guarantee provided by this class is that equal keys lead to the same lock (or semaphore), i.e. if (key1.equals(key2)) then striped.get(key1) == striped.get(key2) (assuming Object.hashCode() is correctly implemented for the keys). Note that if key1 is not equal to key2, it is not guaranteed that striped.get(key1) != striped.get(key2); the elements might nevertheless be mapped to the same lock. The lower the number of stripes, the higher the probability of this happening.<br>

Prior to this class, one might be tempted to use Map<K, Lock>, where K represents the task. This maximizes concurrency by having each unique key mapped to a unique lock, but also maximizes memory footprint. On the other extreme, one could use a single lock for all tasks, which minimizes memory footprint but also minimizes concurrency. Instead of choosing either of these extremes, Striped allows the user to trade between required concurrency and memory footprint. For example, if a set of tasks are CPU-bound, one could easily create a very compact Striped<Lock> of availableProcessors() * 4 stripes, instead of possibly thousands of locks which could be created in a Map<K, Lock> structure.</blockquote>

]]></description>
<dc:subject>locking concurrency java guava semaphores coding via:twitter</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:7f8bcbb66762/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:guava"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:semaphores"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:twitter"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.1024cores.net/home">
    <title>1024cores</title>
    <dc:date>2012-08-19T14:35:59+00:00</dc:date>
    <link>http://www.1024cores.net/home</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Some good algorithms and notes by Dmitry Vyukov on 'lockfree, waitfree, obstruction-free synchronization algorithms and data structures, scalability-oriented architecture, multicore/multiprocessor design patterns, high-performance computing, threading technologies and libraries (OpenMP, TBB, PPL), message-passing systems and related topics.'  The catalog of lock-free queue implementations is particularly extensive (via Sergio Bossa)]]></description>
<dc:subject>algorithms concurrency articles dmitry-vyukov go c++ coding via:sergio-bossa</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:550e96245d4d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:articles"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:dmitry-vyukov"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:go"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:c++"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:sergio-bossa"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://highscalability.com/blog/2012/3/6/ask-for-forgiveness-programming-or-how-well-program-1000-cor.html">
    <title>Ask For Forgiveness Programming - Or How We'll Program 1000 Cores</title>
    <dc:date>2012-04-13T09:20:39+00:00</dc:date>
    <link>http://highscalability.com/blog/2012/3/6/ask-for-forgiveness-programming-or-how-well-program-1000-cor.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Nifty concept from IBM Research's David Ungar -- "race-and-repair".  Simply put, allow lock-free lossy/inconsistent calculation, and backfill later, using concepts like "freshener" threads, to reconcile inconsistencies.  This is a familiar concept in distributed computing nowadays thanks to CAP, but I hadn't heard it being applied to single-host multicore parallel programming before -- I can already think of an application in our codebase...]]></description>
<dc:subject>race-and-repair concurrency coding ibm parallelism parallel david-ungar cap multicore</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:fd12be6fa86f/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:race-and-repair"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ibm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:parallelism"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:parallel"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:david-ungar"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multicore"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html">
    <title>Fault Tolerance in a High Volume, Distributed System</title>
    <dc:date>2012-03-02T14:02:22+00:00</dc:date>
    <link>http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Netflix's "DependencyCommand", a resiliency system for SOA inter-service network calls, offering builtin support for threadpools, timeouts, retries and graceful failover.  Very nice]]></description>
<dc:subject>netflix architecture concurrency distributed failover ha resiliency fail-fast failsafe soa fault-tolerance</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:d34c188eb195/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:netflix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distributed"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failover"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ha"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:resiliency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fail-fast"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failsafe"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:soa"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fault-tolerance"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work">
    <title>How does LMAX's disruptor pattern work? - Stack Overflow</title>
    <dc:date>2011-11-23T09:52:35+00:00</dc:date>
    <link>http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work</link>
    <dc:creator>jm</dc:creator><description><![CDATA[LMAX's "Disruptor" concurrent-server pattern, claiming to be a higher-throughput, lower-latency, and lock-free alternative to the SEDA pattern using a massive ring buffer.  Good discussion here at SO.  (via Filippo)]]></description>
<dc:subject>via:filippo servers seda queueing concurrency disruptor patterns latency trading performance ring-buffers</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:388ee9929e15/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:filippo"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:servers"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:seda"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queueing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:disruptor"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:patterns"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:trading"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ring-buffers"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://akka.io/">
    <title>Akka</title>
    <dc:date>2011-03-27T22:20:47+00:00</dc:date>
    <link>http://akka.io/</link>
    <dc:creator>jm</dc:creator><description><![CDATA['platform for event-driven, scalable, and fault-tolerant architectures on the JVM' .. Actor-based, 'let-it-crash', Apache-licensed, Java and Scala APIs, remote Actors, transactional memory -- looks quite nice]]></description>
<dc:subject>scala java concurrency scalability apache akka actors erlang fault-tolerance events</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:d8d97dabbd34/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scala"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:java"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:apache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:akka"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:actors"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:erlang"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fault-tolerance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:events"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://mdm.berlios.de/usage.html">
    <title>Project Middleman</title>
    <dc:date>2010-10-19T20:12:17+00:00</dc:date>
    <link>http://mdm.berlios.de/usage.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[another concurrency shell command; interesting approach to dashboarding the results, with the "mdm.screen" utility provided]]></description>
<dc:subject>mdm unix concurrency shell linux forking background xargs parallelism</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:0868e2c3b4d8/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mdm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:unix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:shell"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:forking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:background"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:xargs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:parallelism"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://savannah.gnu.org/projects/parallel">
    <title>GNU Parallel - build and execute command lines from standard input in parallel</title>
    <dc:date>2010-10-19T20:10:05+00:00</dc:date>
    <link>http://savannah.gnu.org/projects/parallel</link>
    <dc:creator>jm</dc:creator><description><![CDATA[by Ole Tange.  pretty extensive, if inscrutable (via Tony Finch)]]></description>
<dc:subject>via:fanf unix concurrency gnu linux job parallel scripting shell</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:603200e22e92/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:fanf"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:unix"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gnu"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:job"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:parallel"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scripting"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:shell"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/">
    <title>How do we kick our synchronous addiction?</title>
    <dc:date>2010-02-10T14:45:36+00:00</dc:date>
    <link>http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[great post on the hazards of programming in an async framework, and how damn hard it is.  good comments thread too (via jzawodny)]]></description>
<dc:subject>via:jzawodny coding python javascript scalability ruby concurrency erlang async node.js twisted</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:c44bdbe63e1d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:jzawodny"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:python"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:javascript"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ruby"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:erlang"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:async"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:node.js"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:twisted"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.zlib.net/pigz/">
    <title>pigz</title>
    <dc:date>2009-10-21T10:09:18+00:00</dc:date>
    <link>http://www.zlib.net/pigz/</link>
    <dc:creator>jm</dc:creator><description><![CDATA['A parallel implementation of gzip for modern multi-processor, multi-core machines', by Mark Adler, no less]]></description>
<dc:subject>adler pigz gzip compression performance concurrency shell parallel multicore zip software</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:3488243c8811/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:adler"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:pigz"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gzip"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:compression"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:shell"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:parallel"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:multicore"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:zip"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:software"/>
</rdf:Bag></taxo:topics>
</item>
</rdf:RDF>