<?xml version="1.0" encoding="UTF-8"?>
<page>
  <created-at type="datetime">2009-09-28T23:26:07Z</created-at>
  <description></description>
  <id type="integer">6381</id>
  <name>Home</name>
  <number type="integer">16</number>
  <person-id type="integer">139</person-id>
  <text>&lt;h1&gt; Late-2009 Concurrency Linkography &lt;/h1&gt;

__TOC__

I'm dumping in a ton of concurrency-related links that I've been absorbing, will build a structure for them as I go along.  This is on a wiki not my blog because it could benefit from input from more than one person.

== Problem/Solution Overview ==

[http://jacobian.org/writing/snakes-on-the-web/#s-concurrency Snakes on the Web] is a general survey on issues of Web development, but this link is to a section called &quot;Concurrency&quot; which I think is a nice statement of the general problem.

[http://www.slideshare.net/twleung/a-survey-of-concurrency-constructs A Survey of Concurrency Constructs] is Ted Leung's OSCON 2009 address.  Ted follows up in [http://www.sauria.com/blog/2009/10/05/the-cambrian-period-of-concurrency/ The Cambrian Period of Concurrency].

[http://www.javaconcurrencyinpractice.com/ Java Concurrency in Practice] by Brian Goetz et al.  I haven't read this but everyone says it's the standard reference for thread-centric concurrent-programming issues.

[http://java.ociweb.com/mark/stm/article.html Software Transactional Memory] by Mark Volkmann. Focuses on STM and specifically the Clojure implementation, but has a helpful overview of lock- and actor-based approaches too.

[http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf The Landscape of Parallel Computing Research: A View From Berkeley] (PDF).  Discusses hardware as well as software, and proposes a set of 13 benchmarks which might be useful stand-ins for a variety of application classes.

[http://software.intel.com/en-us/articles/technical-books-for-multi-core-software-developers/ Technical Books for Multi-Core Software Developers] at software.intel.com, a bibliography of concurrent-programming books.

[http://macton.smugmug.com/gallery/9114809_C9awM#P-1-12 QuickSort Is Not a Concurrent Algorithm] by Mike Acton; a good example of thinking about concurrency at a larger scale, presented as a white-board/PostIt lecture.

== Language Comparisons ==

[http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell Joe Armstrong and Simon Peyton Jones discuss Erlang and Haskell] Tons of interesting stuff; Armstrong asserts that the core of Erlang isn't so much the concurrency as the error handling. Peyton-Jones notes that just because you're functional doesn't mean that you get concurrency for free.  If you say a(whatever) + b(whatever) when both are side-effect free, in principle you can do a and b in different processes; but the admin overhead will quickly outweigh the concurrency gain if done naively. P-J on some Erlang feature: &quot;Sinfully easy&quot;

[http://www.starling-software.com/en/blog/drafts/2009/09/27.succ-java-1-common-ground.html succ Java 1: Common Ground] by Curt Sampson compares idioms from Clojure, Groovy, Ruby, Scala, and Haskell.  .

[http://blog.thinkrelevance.com/2008/9/10/java-next-4-immutability Java.next #4: Immutability] By Stuart Halloway; Ruby/Groovy/Scala/Clojure.

[http://www.infoq.com/news/2008/06/scala-vs-erlang The multicore crises: Scala vs. Erlang] by Niclas Nilsson.

Two Clojure-centric discussions of concurrency and state issues: [http://clojure.org/state Values and Change - Clojure's approach to Identity and State] and [http://bc.tech.coop/blog/081201.html Clojure could be to Concurrency-Oriented Programming what Java was to OOP].

== Specific Language Coverage ==

=== Clojure ===

[http://java.ociweb.com/mark/clojure/article.html Clojure - Functional Programming for the JVM] by Mark Volkmann, nice compact run through Clojure.

[http://wiki.jvmlangsummit.com/Keynote_-_Hickey Rich Hickey's Clojure Keynote] from the 2009 JVM Language Summit.  Notes by @al3x and link to slides.  From the context, I suspect that [http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey Persistent Data Structures and Managed References] is similar in its content.  Very impressive deep-dive.

=== Haskell ===

[http://www.se-radio.net/podcast/2008-08/episode-108-simon-peyton-jones-functional-programming-and-haskell Simon Peyton Jones on Functional Programming and Haskell] Audio podcast.  Quote: &quot;Robust guarantees of where impurity is happening.&quot;

[http://book.realworldhaskell.org/ Real-World Haskell] by Bryan O'Sullivan, Don Stewart, and John Goerzen.

[http://learnyouahaskell.com/ Learn You a Haskell] Light-hearted walk through Haskell.

=== Scala ===

[http://article.gmane.org/gmane.comp.lang.scala/13300/ Symbol ouchiness] Flaming design of Scala as regards concurrency engineering.  But see comments to [http://blog.thinkrelevance.com/2008/9/10/java-next-4-immutability Java.next #4] cited above.

=== Erlang ===

[http://www.vimeo.com/6699769 Functional Programming at Facebook] There's a touch of Haskell but this is mostly an Erlang success story.  Note: this is from Malcolm Wallace's [http://www.vimeo.com/album/128851 CUFP 2009] video collection; the others, I thought, mostly highlighted the glaring absence of real commercial applications.

== Wide Finder ==

A project I ran in 2007 and 2008 to investigate the application of concurrency techniques to a boring logfile-processing job.  My conclusion was that dramatic gains in performance were achievable, but that the cost in programming difficulty was too high.

[http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder The Wide Finder Project] First cut, with TOC.

[http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2 Wide Finder 2] Second cut, with TOC.

[http://wikis.sun.com/display/WideFinder/Wide+Finder+Home Wide Finder Home] On wikis.sun.com.

[http://www.eigenclass.org/hiki/widefinder2-conclusions Wide Finder 2: processing 42GB of httpd logs, 300X faster than na&#239;ve Ruby] by Mauricio Fernandez.

[http://girtby.net/archives/2008/07/03/wide-finder-2-the-widening/ Wide Finder 2: The Widening] by Alastair Rankine.

</text>
  <text-as-html>&lt;p&gt;&lt;h1&gt; Late-2009 Concurrency Linkography &lt;/h1&gt;

&lt;/p&gt;&lt;div id='toc' class='toc'&gt;
           &lt;div id='toctitle' class='toc-title'&gt;
             &lt;span&gt;Contents&lt;/span&gt;
           &lt;/div&gt;
           &lt;div id='toccontents' class='toc-contents'&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;1 &lt;a href='#Problem/Solution_Overview'&gt; Problem/Solution Overview &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2 &lt;a href='#Language_Comparisons'&gt; Language Comparisons &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3 &lt;a href='#Specific_Language_Coverage'&gt; Specific Language Coverage &lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;3.1 &lt;a href='#Clojure'&gt; Clojure &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3.2 &lt;a href='#Haskell'&gt; Haskell &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3.3 &lt;a href='#Scala'&gt; Scala &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3.4 &lt;a href='#Erlang'&gt; Erlang &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;4 &lt;a href='#Wide_Finder'&gt; Wide Finder &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;
         &lt;/div&gt;&lt;p&gt;&lt;br /&gt;

&lt;/p&gt;&lt;p&gt;I'm dumping in a ton of concurrency-related links that I've been absorbing, will build a structure for them as I go along.  This is on a wiki not my blog because it could benefit from input from more than one person.

&lt;/p&gt;&lt;h2&gt;&lt;a name='Problem/Solution_Overview'&gt;&lt;/a&gt; Problem/Solution Overview &lt;/h2&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://jacobian.org/writing/snakes-on-the-web/#s-concurrency&quot;&gt;Snakes on the Web&lt;/a&gt; is a general survey on issues of Web development, but this link is to a section called &amp;quot;Concurrency&amp;quot; which I think is a nice statement of the general problem.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.slideshare.net/twleung/a-survey-of-concurrency-constructs&quot;&gt;A Survey of Concurrency Constructs&lt;/a&gt; is Ted Leung's OSCON 2009 address.  Ted follows up in &lt;a class='external' href=&quot;http://www.sauria.com/blog/2009/10/05/the-cambrian-period-of-concurrency/&quot;&gt;The Cambrian Period of Concurrency&lt;/a&gt;.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.javaconcurrencyinpractice.com/&quot;&gt;Java Concurrency in Practice&lt;/a&gt; by Brian Goetz et al.  I haven't read this but everyone says it's the standard reference for thread-centric concurrent-programming issues.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://java.ociweb.com/mark/stm/article.html&quot;&gt;Software Transactional Memory&lt;/a&gt; by Mark Volkmann. Focuses on STM and specifically the Clojure implementation, but has a helpful overview of lock- and actor-based approaches too.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf&quot;&gt;The Landscape of Parallel Computing Research: A View From Berkeley&lt;/a&gt; (PDF).  Discusses hardware as well as software, and proposes a set of 13 benchmarks which might be useful stand-ins for a variety of application classes.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://software.intel.com/en-us/articles/technical-books-for-multi-core-software-developers/&quot;&gt;Technical Books for Multi-Core Software Developers&lt;/a&gt; at software.intel.com, a bibliography of concurrent-programming books.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://macton.smugmug.com/gallery/9114809_C9awM#P-1-12&quot;&gt;QuickSort Is Not a Concurrent Algorithm&lt;/a&gt; by Mike Acton; a good example of thinking about concurrency at a larger scale, presented as a white-board/PostIt lecture.

&lt;/p&gt;&lt;h2&gt;&lt;a name='Language_Comparisons'&gt;&lt;/a&gt; Language Comparisons &lt;/h2&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell&quot;&gt;Joe Armstrong and Simon Peyton Jones discuss Erlang and Haskell&lt;/a&gt; Tons of interesting stuff; Armstrong asserts that the core of Erlang isn't so much the concurrency as the error handling. Peyton-Jones notes that just because you're functional doesn't mean that you get concurrency for free.  If you say a(whatever) + b(whatever) when both are side-effect free, in principle you can do a and b in different processes; but the admin overhead will quickly outweigh the concurrency gain if done naively. P-J on some Erlang feature: &amp;quot;Sinfully easy&amp;quot;

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.starling-software.com/en/blog/drafts/2009/09/27.succ-java-1-common-ground.html&quot;&gt;succ Java 1: Common Ground&lt;/a&gt; by Curt Sampson compares idioms from Clojure, Groovy, Ruby, Scala, and Haskell.  .

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://blog.thinkrelevance.com/2008/9/10/java-next-4-immutability&quot;&gt;Java.next #4: Immutability&lt;/a&gt; By Stuart Halloway; Ruby/Groovy/Scala/Clojure.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.infoq.com/news/2008/06/scala-vs-erlang&quot;&gt;The multicore crises: Scala vs. Erlang&lt;/a&gt; by Niclas Nilsson.

&lt;/p&gt;&lt;p&gt;Two Clojure-centric discussions of concurrency and state issues: &lt;a class='external' href=&quot;http://clojure.org/state&quot;&gt;Values and Change - Clojure's approach to Identity and State&lt;/a&gt; and &lt;a class='external' href=&quot;http://bc.tech.coop/blog/081201.html&quot;&gt;Clojure could be to Concurrency-Oriented Programming what Java was to OOP&lt;/a&gt;.

&lt;/p&gt;&lt;h2&gt;&lt;a name='Specific_Language_Coverage'&gt;&lt;/a&gt; Specific Language Coverage &lt;/h2&gt;
&lt;h3&gt;&lt;a name='Clojure'&gt;&lt;/a&gt; Clojure &lt;/h3&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://java.ociweb.com/mark/clojure/article.html&quot;&gt;Clojure - Functional Programming for the JVM&lt;/a&gt; by Mark Volkmann, nice compact run through Clojure.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://wiki.jvmlangsummit.com/Keynote_-_Hickey&quot;&gt;Rich Hickey's Clojure Keynote&lt;/a&gt; from the 2009 JVM Language Summit.  Notes by @al3x and link to slides.  From the context, I suspect that &lt;a class='external' href=&quot;http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey&quot;&gt;Persistent Data Structures and Managed References&lt;/a&gt; is similar in its content.  Very impressive deep-dive.

&lt;/p&gt;&lt;h3&gt;&lt;a name='Haskell'&gt;&lt;/a&gt; Haskell &lt;/h3&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://www.se-radio.net/podcast/2008-08/episode-108-simon-peyton-jones-functional-programming-and-haskell&quot;&gt;Simon Peyton Jones on Functional Programming and Haskell&lt;/a&gt; Audio podcast.  Quote: &amp;quot;Robust guarantees of where impurity is happening.&amp;quot;

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://book.realworldhaskell.org/&quot;&gt;Real-World Haskell&lt;/a&gt; by Bryan O'Sullivan, Don Stewart, and John Goerzen.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://learnyouahaskell.com/&quot;&gt;Learn You a Haskell&lt;/a&gt; Light-hearted walk through Haskell.

&lt;/p&gt;&lt;h3&gt;&lt;a name='Scala'&gt;&lt;/a&gt; Scala &lt;/h3&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://article.gmane.org/gmane.comp.lang.scala/13300/&quot;&gt;Symbol ouchiness&lt;/a&gt; Flaming design of Scala as regards concurrency engineering.  But see comments to &lt;a class='external' href=&quot;http://blog.thinkrelevance.com/2008/9/10/java-next-4-immutability&quot;&gt;Java.next #4&lt;/a&gt; cited above.

&lt;/p&gt;&lt;h3&gt;&lt;a name='Erlang'&gt;&lt;/a&gt; Erlang &lt;/h3&gt;
&lt;p&gt;&lt;a class='external' href=&quot;http://www.vimeo.com/6699769&quot;&gt;Functional Programming at Facebook&lt;/a&gt; There's a touch of Haskell but this is mostly an Erlang success story.  Note: this is from Malcolm Wallace's &lt;a class='external' href=&quot;http://www.vimeo.com/album/128851&quot;&gt;CUFP 2009&lt;/a&gt; video collection; the others, I thought, mostly highlighted the glaring absence of real commercial applications.

&lt;/p&gt;&lt;h2&gt;&lt;a name='Wide_Finder'&gt;&lt;/a&gt; Wide Finder &lt;/h2&gt;
&lt;p&gt;
A project I ran in 2007 and 2008 to investigate the application of concurrency techniques to a boring logfile-processing job.  My conclusion was that dramatic gains in performance were achievable, but that the cost in programming difficulty was too high.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder&quot;&gt;The Wide Finder Project&lt;/a&gt; First cut, with TOC.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2&quot;&gt;Wide Finder 2&lt;/a&gt; Second cut, with TOC.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://wikis.sun.com/display/WideFinder/Wide+Finder+Home&quot;&gt;Wide Finder Home&lt;/a&gt; On wikis.sun.com.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://www.eigenclass.org/hiki/widefinder2-conclusions&quot;&gt;Wide Finder 2: processing 42GB of httpd logs, 300X faster than na&#239;ve Ruby&lt;/a&gt; by Mauricio Fernandez.

&lt;/p&gt;&lt;p&gt;&lt;a class='external' href=&quot;http://girtby.net/archives/2008/07/03/wide-finder-2-the-widening/&quot;&gt;Wide Finder 2: The Widening&lt;/a&gt; by Alastair Rankine.

&lt;/p&gt;</text-as-html>
  <updated-at type="datetime">2009-11-05T17:18:04Z</updated-at>
  <wiki-id type="integer">38935</wiki-id>
</page>
