<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://herbsutter.spaces.live.com/mmm2008-04-25_07.02/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fherbsutter.spaces.live.com%2fcategory%2fConcurrency%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Sutter's Mill: Concurrency</title><description /><link>http://herbsutter.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catConcurrency</link><language>en-US</language><pubDate>Fri, 09 May 2008 07:07:32 GMT</pubDate><lastBuildDate>Fri, 09 May 2008 07:07:32 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://herbsutter.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>3261494312968475067</live:id><live:alias>herbsutter</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Concurrency Interview with DevX</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!784.entry</link><description>&lt;p&gt;I recently spent an hour on the phone to talk concurrency with DevX's Alexa Weber Morales. &lt;a href="http://www.devx.com/go-parallel/Article/37573"&gt;Part 1 of that interview&lt;/a&gt; just went live on the web, and focuses mostly on what concurrency and parallelism are, how to take advantage of multicore chips, and whether concurrency will ever be really accessible to mainstream developers. The site seems to be having intermittent problems displaying the pages; just hit the link a few more times if it doesn't work right away. &lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am not responsible for the article title (yikes! &amp;quot;whisperer&amp;quot;?! my goodness gracious!) and the intro blurb vastly overstates my role (Alexa is being way too kind). But it is true that it's important for us-the-industry to bring concurrency to the mainstream in a grokkable way, as we have already successfully done with OO and GUIs in the past.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Concurrency+Interview+with+DevX&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!784.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!784.entry</guid><pubDate>Sat, 29 Mar 2008 01:48:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!784/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!784.entry#comment</wfw:comment><dcterms:modified>2008-03-29T01:48:38Z</dcterms:modified></item><item><title>New Course Available: Effective Concurrency</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!514.entry</link><description>&lt;p&gt;Many of you have kindly sent mail about my Effective Concurrency &lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!513.entry"&gt;columns&lt;/a&gt; and asking when there'll be a course. Well, I'm happy to announce that the answer is: &lt;a href="http://construx.com/Page.aspx?nid=17&amp;amp;id=108"&gt;&lt;strong&gt;May 19-21, 2008&lt;/strong&gt;&lt;/a&gt;. &lt;p&gt;Here's the brief information (more details below): &lt;blockquote&gt; &lt;h3&gt;&lt;a href="http://construx.com/Page.aspx?nid=17&amp;amp;id=108"&gt;&lt;strong&gt;&lt;font color="#000080"&gt;3-Day Seminar: Effective Concurrency&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/h3&gt; &lt;h4&gt;&lt;font color="#000080"&gt;May 19-21, 2008&lt;br&gt;Bellevue, WA, USA&lt;br&gt;Developed and taught by Herb Sutter&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;font color="#000080"&gt;This course covers the fundamental tools that software developers need to write effective concurrent software for both single-core and multi-core/many-core machines. To use concurrency effectively, we must identify and solve four key challenges: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;Leverage the ability to perform and manage work asynchronously &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Build applications that naturally run faster on new hardware having more and more cores &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Manage shared objects in memory effectively to avoid races and deadlocks&lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Engineer specifically for high performance&lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000080"&gt;This seminar will equip attendees to reason correctly about concurrency requirements and tradeoffs, to migrate existing code bases to be concurrency-enabled, and to achieve key success factors for a concurrent programming project. Most code examples in the course can be directly translated to popular platforms and concurrency libraries, including Linux, Windows, Java, .NET, pthreads, and the forthcoming ISO C++0x standard.&lt;/font&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;Note on class size limit and possible waitlist:&lt;/strong&gt; There is a hard limit on attendance at this first one (really). But if the registration site says you'll get waitlisted, don't give up: Go ahead and sign up anyway because we may be able to put together a second installment of the seminar a week or two later if there's enough interest. &lt;p&gt;Finally, here's a summary of what we'll cover during the three days. &lt;blockquote&gt; &lt;p&gt;&lt;font color="#000080"&gt;Fundamentals &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;Define basic concurrency goals and requirements &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Understand applications' scalability needs &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Key concurrency patterns &lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000080"&gt;Isolation: Keep Work Separate &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;Running tasks in isolation and communicate via async messages &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Integrating multiple messaging systems, including GUIs and sockets &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Building responsive applications using background workers &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Threads vs. thread pools &lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000080"&gt;Scalability: Re-enable the Free Lunch &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;When and how to use more cores  &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Exploiting parallelism in algorithms  &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Exploiting parallelism in data structures  &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Breaking the scalability barrier &lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000080"&gt;Consistency: Don’t Corrupt Shared State &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;The many pitfalls of locks--deadlock, convoys, etc. &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Locking best practices &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Reducing the need for locking shared data &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Safe lock-free coding patterns &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Avoiding the pitfalls of general lock-free coding &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Races and race-related effects &lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000080"&gt;Migrating Existing Code Bases to Use Concurrency &lt;/font&gt; &lt;p&gt;&lt;font color="#000080"&gt;Near-Future Tools and Features &lt;/font&gt; &lt;p&gt;&lt;font color="#000080"&gt;High Performance Concurrency &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000080"&gt;Machine architecture and concurrency &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Costs of fundamental operations, including locks, context switches, and system calls &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Memory and cache effects &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Data structures that support and undermine concurrency &lt;/font&gt; &lt;li&gt;&lt;font color="#000080"&gt;Enabling linear and superlinear scaling &lt;/font&gt;&lt;/ul&gt;&lt;/blockquote&gt; &lt;p&gt;I hope to get to meet some of you here in the Seattle area!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+New+Course+Available%3a+Effective+Concurrency&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!514.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!514.entry</guid><pubDate>Thu, 13 Mar 2008 00:22:27 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!514/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!514.entry#comment</wfw:comment><dcterms:modified>2008-03-13T00:22:27Z</dcterms:modified></item><item><title>Effective Concurrency: Super Linearity and the Bigger Machine</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!513.entry</link><description>&lt;div&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://www.ddj.com/hpc-high-performance-computing/206903306"&gt;&lt;strong&gt;&amp;quot;Super Linearity and the Bigger Machine&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. From the article:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;&lt;a href="http://q6y8ug.bay.livefilestore.com/y1pkBWHZvSH-13MUZFgAZORnXtMpUGUYQhXK_fvea3U9n4BjiNrzkD8m6iF2NkWt0CogMU_NqttwtB1jdQpnF6zGQ?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=137 alt=ec09-fig2 src="http://by2.storage.msn.com/y1pchDoYPr1r3vPM4HYgCWyVlFVVyImNTZsldbIO3vvMHz89fqRktSpBQ969CqhrlXF1E7oLZqdtgx8oV2EbCMbh2ujXLzo-RGO?PARTNER=WRITER" width=244 align=right border=0&gt;&lt;/a&gt; &lt;p&gt;There are two main ways to achieve superlinear scalability, or to use P processors to compute an answer more than P times faster...: &lt;ul&gt; &lt;li&gt;Do disproportionately less work.  &lt;li&gt;Harness disproportionately more resources. &lt;/ul&gt; &lt;p&gt;Last month, we focused on the first point by illustrating parallel search and how it naturally achieves superlinear speedups when matches are not distributed evenly because some workers get &amp;quot;rich&amp;quot; subranges and will find a match faster, which benefits the whole search because we can stop as soon as any worker finds a match. &lt;p&gt;This month, we'll conclude examining the first point with a few more examples, and then consider how to achieve superlinear speedups by harnessing more resources—quite literally, running on a bigger machine without any change in the hardware. ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;table cellspacing=5 cellpadding=5 width=555 border=0&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;July 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;August 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;September 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;October 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;Apply Critical Sections Consistently&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;November 2007 &lt;td valign=top width=422&gt;&lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!342.entry"&gt;&lt;a title="Avoid Calling Unknown Code While Inside a Critical Section" href="http://ddj.com/architect/202802983"&gt;Avoid Calling Unknown Code While Inside a Critical Section&lt;/a&gt;&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;December 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/204801163"&gt;Use Lock Hierarchies to Avoid Deadlock&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;January 2008 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/cpp/205900309"&gt;Break Amdahl's Law!&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;February 2008 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/206100542"&gt;Going Superlinear&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;March 2008 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/206903306"&gt;Super Linearity and the Bigger Machine&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Super+Linearity+and+the+Bigger+Machine&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!513.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!513.entry</guid><pubDate>Wed, 12 Mar 2008 23:37:25 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!513/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!513.entry#comment</wfw:comment><dcterms:modified>2008-03-12T23:37:25Z</dcterms:modified></item><item><title>How parallelism demos are useful</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!441.entry</link><description>&lt;p&gt;In &lt;a href="http://www.ddj.com/hpc-high-performance-computing/205900309"&gt;&amp;quot;Break Amdahl's Law!&amp;quot;&lt;/a&gt;, I described ways to enable scalable applications, and wrote in part: &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;But don't show me ray-traced bouncing balls or Mandelbrot graphics or the other usual embarrassingly parallel but niche (or downright useless) clichés—what we're looking for are real ideas of real software we could imagine real kids and grandmothers using that could become possible on manycore machines. Here's a quick potential example: Researchers know how to do speech recognition with near-human-quality accuracy in the lab, which is astonishingly good and would enable breakthrough user interfaces if it could be done that reliably in real time. The only trouble is that the software takes a week to run...on a single core. Can it be parallelized, and if so how many cores would we need to get a useful answer in a useful time? Bunches of smart people (and the smart money behind them) are investing hard work not only to find out the answer to that question, but also to find more questions like it.&lt;/em&gt;&lt;/blockquote&gt; &lt;p&gt;Just to be clear, in the first sentence above I didn't mean to say that the standard demos are useless -- far from it (see below). This was intended to be a challenging call to action to not be satisfied with demos alone, but for us as an industry to imagine and develop compelling mainstream end &lt;em&gt;applications&lt;/em&gt; that are multicore- and manycore-scalable. (To make that clearer, I'm going to ditch and rewrite the first sentence above for the &lt;em&gt;Effective Concurrency&lt;/em&gt; book.) &lt;p&gt;The standard demos are indeed important -- not only as proofs of concept, that the technology really does enable scalable parallel code, but at least as importantly as helpful tools in helping us to understand how a given parallel technology or runtime works. &lt;h3&gt;To understand concurrency mechanics/characteristics&lt;/h3&gt; &lt;p&gt;&lt;a href="http://byfiles.storage.msn.com/y1pgF2c1f0SPofCMQAiM5dB1PppqdilW49_KS1xQn2qa4zx4eVc7cvMPPIJR_ktVwlXFLNJy430II4?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 15px 0px 0px;border-left:0px;border-bottom:0px" height=223 alt="mandlebrot_threads" src="http://byfiles.storage.msn.com/y1pgF2c1f0SPoe6QRyRQ1fJ3DP_TjhDNiBGOEtoe-jVCLTmreSXYR9GAyEZpz26BHAHErWHBPE67po?PARTNER=WRITER" width=244 align=left border=0&gt;&lt;/a&gt; For example, consider a standard Mandelbrot-rendering demo, but with the twist that each worker thread (core) renders its portion of the work in a different color. On a traditional runtime with static scheduling, some workers with easy-to-compute sections will be done early and wait idly while the other workers finish their harder-to-compute sections, and we can see visually that each colored section is the same size and some colored sections appear faster than others. But on a runtime with dynamic scheduling, and especially one that supports Cilk-style work stealing, we get efficient load balancing where workers who are assigned &amp;quot;easy&amp;quot; sections and are done early can contribute to remaining work in harder-to-compute areas -- and visually some sections fill in with one color but then the same color starts to add to other yet-unfinished sections. The bands of color let us see which worker did what work and helped out in what other areas, and the overall visual progress of the whole image lets us see that the system as a whole is doing useful work the whole time. So the colored Mandelbrot demo is a very useful tool to let us understand what's going on quickly and clearly, in a way that presenting the results in a numerical table can't. &lt;h3&gt;To illustrate a path to future applications&lt;/h3&gt; &lt;p&gt;&lt;img style="margin:0px 5px 0px 10px" src="http://blogs.intel.com/research/teas_edited-1.jpg" align=right&gt;Similarly, ray-tracing may well make multicore and manycore CPUs the future of photorealistic graphics in a way that may not be applicable to standard GPUs (time will tell). As shown in the blogs below, ray-tracing makes a qualitative difference in the nature of lighting models. But can't we do this already with GPUs? Interestingly, not necessarily; ray-tracing seems to represent an algorithm that is hard to accelerate with GPUs with limited abilities to do the fine-grain scheduling that runtimes based on techniques like work stealing are well suited to do. Some links: &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.intel.com/research/2007/10/real_time_raytracing_the_end_o.php"&gt;Intel's ray-tracing summary and why it's important&lt;/a&gt; &lt;li&gt;&lt;a href="http://blogs.intel.com/research/2007/10/more_on_the_future_of_raytraci.php"&gt;Followup addressing caveats, why ray-tracing isn't necessarily the best choice for everything, but still important&lt;/a&gt;&lt;/ul&gt; &lt;h3&gt;Yes, demos are useful&lt;/h3&gt; &lt;p&gt;My point in the original quote above (which I see I could have stated more clearly) was simply this: Once we've achieved the demos, we shouldn't sit back and declare victory. The demos aren't the end goal; we still need the applications. &lt;p&gt;Concurrency demos are useful to help prove a technology can scale and to understand how it works, and some of them show potentially fruitful and exciting paths to real and compelling manycore-exploiting applications, but it's still up to us as an industry to continue to imagine and build those applications. I believe that we can and will.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+How+parallelism+demos+are+useful&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!441.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!441.entry</guid><pubDate>Sat, 02 Feb 2008 03:31:16 GMT</pubDate><slash:comments>12</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!441/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!441.entry#comment</wfw:comment><dcterms:modified>2008-02-02T03:31:16Z</dcterms:modified></item><item><title>Effective Concurrency: Going Superlinear</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!431.entry</link><description>&lt;p&gt; &lt;div&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://www.ddj.com/hpc-high-performance-computing/206100542"&gt;&lt;strong&gt;&amp;quot;Going Superlinear&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. From the article:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;&lt;img src="http://i.cmpnet.com/ddj/images/article/2008/0802/080201hs01_f1.gif" align=right&gt;We spend most of our scalability lives inside a triangular box, shown in Figure 1. It reminds me of the early days of flight: We try to lift ourselves away from the rough ground of zero scalability and fly as close as possible to the cloud ceiling of linear speedup. Normally, the Holy Grail of parallel scalability is to linearly use &lt;em&gt;P&lt;/em&gt; processors or cores to complete some work almost &lt;em&gt;P&lt;/em&gt; times faster, up to some hopefully high number of cores before our code becomes bound on memory or I/O or something else that means diminishing returns for adding more cores. As Figure 1 illustrates, the traditional shape of our &amp;quot;success&amp;quot; curve lies inside the triangle. &lt;p&gt;Sometimes, however, we can equip our performance plane with extra tools and safely break through the linear ceiling into the superlinear stratosphere. So the question is: &amp;quot;Under what circumstances can we use P cores to do work more than &lt;em&gt;P&lt;/em&gt; times faster?&amp;quot; There are two main ways to enter that rarefied realm: &lt;ul&gt; &lt;li&gt;Do disproportionately less work.  &lt;li&gt;Harness disproportionately more resources. &lt;/ul&gt; &lt;p&gt;This month and next, we'll consider situations and techniques that fall into one or both of these categories. ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;table cellspacing=5 cellpadding=5 width=555 border=0&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;July 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;August 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;September 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;October 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;Apply Critical Sections Consistently&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;November 2007 &lt;td valign=top width=422&gt;&lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!342.entry"&gt;&lt;a title="Avoid Calling Unknown Code While Inside a Critical Section" href="http://ddj.com/architect/202802983"&gt;Avoid Calling Unknown Code While Inside a Critical Section&lt;/a&gt;&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;December 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/204801163"&gt;Use Lock Hierarchies to Avoid Deadlock&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;January 2008 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/cpp/205900309"&gt;Break Amdahl's Law!&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;February 2008 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/206100542"&gt;Going Superlinear&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Going+Superlinear&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!431.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!431.entry</guid><pubDate>Wed, 30 Jan 2008 22:27:25 GMT</pubDate><slash:comments>10</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!431/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!431.entry#comment</wfw:comment><dcterms:modified>2008-01-30T22:37:11Z</dcterms:modified></item><item><title>Effective Concurrency: Break Amdahl's Law!</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!396.entry</link><description>&lt;div&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://www.ddj.com/cpp/205900309"&gt;&lt;strong&gt;&amp;quot;Break Amdahl's Law!&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. From the article:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;Back in 1967, Gene Amdahl famously pointed out what seemed like a fundamental limit to how fast you can make your concurrent code: Some amount of a program's processing is fully &amp;quot;&lt;i&gt;O(N)&lt;/i&gt;&amp;quot; parallelizable (call this portion &lt;i&gt;p&lt;/i&gt;), and only that portion can scale directly on machines having more and more processor cores. The rest of the program's work is &amp;quot;&lt;i&gt;O(1)&lt;/i&gt;&amp;quot; sequential (&lt;i&gt;s&lt;/i&gt;). [1,2] Assuming perfect use of all available cores and no parallelization overhead, Amdahl's Law says that the best possible speedup of that program workload on a machine with &lt;i&gt;N&lt;/i&gt; cores is given by &lt;p&gt;&lt;img height=63 src="http://i.cmpnet.com/ddj/images/article/2008/0801/080101hs01_q1.gif" width=233 border=0&gt; &lt;p&gt;Note that, as &lt;i&gt;N&lt;/i&gt; increases to infinity, the best speedup we can ever get is &lt;i&gt;(s+p)/s&lt;/i&gt;. Figure 1 illustrates why a program that is half scalably parallelizable and half not won't scale beyond a factor of two even given infinite cores. Some people find this depressing. They conclude that Amdahl's Law means there's no point in trying to write multicore- and manycore-exploiting applications except for a few &amp;quot;embarrassingly parallel&amp;quot; patterns and problem domains with essentially no sequential work at all. &lt;p&gt;Fortunately, they're wrong. If Amdahl's Game is rigged, well then, to paraphrase a line from the movie &lt;i&gt;WarGames&lt;/i&gt;: The only way to win is not to play. ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;table cellspacing=5 cellpadding=5 width=555 border=0&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;July 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;August 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;September 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;October 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;Apply Critical Sections Consistently&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;November 2007 &lt;td valign=top width=422&gt;&lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!342.entry"&gt;&lt;a title="Avoid Calling Unknown Code While Inside a Critical Section" href="http://ddj.com/architect/202802983"&gt;Avoid Calling Unknown Code While Inside a Critical Section&lt;/a&gt;&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;December 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/204801163"&gt;Use Lock Hierarchies to Avoid Deadlock&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Break+Amdahl's+Law!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!396.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!396.entry</guid><pubDate>Fri, 18 Jan 2008 00:10:30 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!396/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!396.entry#comment</wfw:comment><dcterms:modified>2008-01-18T00:10:30Z</dcterms:modified></item><item><title>Effective Concurrency: Use Lock Hierarchies to Avoid Deadlock</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!370.entry</link><description>&lt;div&gt;&lt;img style="margin:0px 0px 10px 15px" height=260 src="http://i.cmpnet.com/ddj/images/article/2007/0712/071201hs01_f1.gif" width=287 align=right&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://www.ddj.com/hpc-high-performance-computing/204801163"&gt;&lt;strong&gt;&amp;quot;Use Lock Hierarchies to Avoid Deadlock&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. From the article:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;... The only way to eliminate such a potential deadlock is to make sure that all mutexes ever held at the same time are acquired in a consistent order. But how can we ensure this in a way that will be both usable and correct? For example, we could try to figure out which groups of mutexes might ever be held at the same time, and then try to define pairwise ordering rules that cover each possible combination. But that approach by itself is prone to accidentally missing unexpected combinations of locks; and even if we did it perfectly, the result would still be at best &amp;quot;DAG spaghetti&amp;quot;—a directed acyclic graph (DAG) that nobody could comprehend as a whole. And every time we want to add a new mutex to the system, we would have to find a way fit it into the DAG without creating any cycles. &lt;p&gt;We can do better by directly exploiting the knowledge we already have about the structure of the program to regularize the mess and make it understandable. ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;table cellspacing=5 cellpadding=5 width=555 border=0&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;July 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;August 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;September 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;October 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;Apply Critical Sections Consistently&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;November 2007 &lt;td valign=top width=422&gt;&lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!342.entry"&gt;&lt;a title="Avoid Calling Unknown Code While Inside a Critical Section" href="http://ddj.com/architect/202802983"&gt;Avoid Calling Unknown Code While Inside a Critical Section&lt;/a&gt;&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Use+Lock+Hierarchies+to+Avoid+Deadlock&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!370.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!370.entry</guid><pubDate>Wed, 12 Dec 2007 00:05:55 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!370/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!370.entry#comment</wfw:comment><dcterms:modified>2007-12-12T00:05:55Z</dcterms:modified></item><item><title>Parallel Computing Releases at Microsoft</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!363.entry</link><description>&lt;p&gt;For those of you who may be interested in concurrency for Microsoft platforms, and .NET in particular, I'm happy to report some fresh announcements: &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx"&gt;&lt;strong&gt;MSDN has launched a Parallel Computing developer center.&lt;/strong&gt;&lt;/a&gt; This is a section of the MSDN site focused on &amp;quot;providing information, ideas, community, and technology to developers to make it easier to write programs that perform and scale well on parallel hardware.&amp;quot;  &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E848DC1D-5BE3-4941-8705-024BC7F180BA&amp;amp;displaylang=en"&gt;&lt;strong&gt;You can download and try a CTP &amp;quot;preview&amp;quot; of the .NET Parallel Extensions (PFX).&lt;/strong&gt;&lt;/a&gt; These compile and run, but remember they're &lt;a href="http://blogs.msdn.com/pfxteam/archive/2007/11/29/6558557.aspx"&gt;CTP quality&lt;/a&gt;. PFX currently has two major parts:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx"&gt;&lt;strong&gt;PLINQ:&lt;/strong&gt; Parallel Language Integrated Query&lt;/a&gt;, a parallel version of LINQ with extensions like .AsParallel.  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/10/Futures/default.aspx"&gt;&lt;strong&gt;TPL:&lt;/strong&gt; Task Parallel Library&lt;/a&gt; with extensions like Parallel.For loops. &lt;/ul&gt; &lt;li&gt;There's also a &lt;a href="http://blogs.msdn.com/pfxteam/default.aspx"&gt;&lt;strong&gt;PFX Team Blog.&lt;/strong&gt;&lt;/a&gt; &lt;/ul&gt; &lt;p&gt;PFX is for .NET concurrency development, but of course we are (and personally I am) working on native development tools, including for C++ specifically, that are at least as exciting. Stay tuned here for future news. In the meantime, enjoy these bits and the resources and discussion on the Parallel Computing developer center and forums.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Parallel+Computing+Releases+at+Microsoft&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!363.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!363.entry</guid><pubDate>Sun, 02 Dec 2007 02:11:57 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!363/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!363.entry#comment</wfw:comment><dcterms:modified>2007-12-02T06:22:56Z</dcterms:modified></item><item><title>The Concurrency Land Rush: 2007-20??</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!362.entry</link><description>&lt;p&gt;Every time that we experience a &amp;quot;wave&amp;quot; in which the industry takes a programming paradigm that's been growing in a niche, and brings it to the mainstream, we go through similar phases: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;A land rush phase&lt;/strong&gt; during which vendors try to stake out their turf. The market sees an explosive proliferation of products trying to enable mainstream developers to work in the new paradigm and at the same time to differentiate themselves from each other. This phase always takes multiple years, and multiple major releases of many products, consumed at first mainly by early adopters and then, as products mature, broadly across the marketplace.  &lt;li&gt;&lt;strong&gt;A shakeout phase&lt;/strong&gt; as, eventually, the market sifts through the products, selects major winners, and realigns itself around them.&lt;/ul&gt; &lt;p&gt;We (the software industry) have done it all before for technologies like OO and GUIs, and now we're going to do it for concurrency. &lt;p&gt;Starting in 2005, companies started to talk concurrency and to launch internal efforts. But only this year, in 2007, has our industry formally entered the concurrency wave's land rush phase by starting to field real products and preview releases. We're starting to see initial steps toward candidate mainstream-accessible products in releases like Intel's &lt;a href="http://threadingbuildingblocks.org/"&gt;Threading Building Blocks&lt;/a&gt; and &lt;a href="http://softwarecommunity.intel.com/articles/eng/1460.htm"&gt;Software Transactional Memory prototype compiler&lt;/a&gt;, and Microsoft's just-announced and downloadable &lt;a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx"&gt;.NET Parallel Extensions (PFX)&lt;/a&gt; including CTP-level support for Parallel LINQ (PLINQ) and the Task Parallel Library. &lt;p&gt;True, the concurrency landscape has lots of existing tools. So did OO (e.g., Simula) and GUIs (e.g., the Win16 C API) long before they became widely accessible to developers in general. Concurrency's &amp;quot;Simulas and Win16s&amp;quot; include Thread classes and OpenMPI for doing work asynchronously, to OpenMP for fast parallel computation, to some pre-fab lock-free container classes, to limited race detectors and very basic thread profilers. But today's tools are still what you'd expect to see in a niche market: Good enough for highly-trained experts to deliver real products, but not easy enough and not integrated enough across the software stack and tool chains to be broadly adopted by mainstream developers. &lt;p&gt;Just as the OO mainstream land rush was fueled by new and updated tools like Smalltalk and Objective-C and C++ and Java offerings, and the GUI land rush was fueled by MFC and OWL and Cocoa and Visual Basic and Delphi, we're starting to see new and existing companies bringing lots of new and updated offerings across the entire software stack and ecosystem. Expect to see lots of new and updated/extended offerings of: &lt;ul&gt; &lt;li&gt;Languages and frameworks  &lt;li&gt;Runtimes and operating systems  &lt;li&gt;Debuggers and profilers and program analysis tools  &lt;li&gt;Component wizards and IDE integration  &lt;li&gt;Books and courses and conferences&lt;/ul&gt; &lt;p&gt;These are the just beginning. Much more will come, from those same companies and others. Expect at least dozens of major product announcements and releases across the industry, before the toolset expansion phase is fully underway and approaching some maturity. We the industry have undertaken to bring concurrency to the mainstream, and as with OO and GUIs it will take multiple years, and multiple major releases, across the industry on all platforms. &lt;p&gt;As I write this, Seattle's first snowfall of the season is gently descending outside my window. It readily puts one in mind of Frost: We have promises to keep, and miles to go before we sleep.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+The+Concurrency+Land+Rush%3a+2007-20%3f%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!362.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!362.entry</guid><pubDate>Sun, 02 Dec 2007 02:04:40 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!362/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!362.entry#comment</wfw:comment><dcterms:modified>2007-12-02T06:26:30Z</dcterms:modified></item><item><title>Concurrency Town Hall: On the web, this Monday, December 3</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!361.entry</link><description>&lt;p&gt;Earlier this fall, &lt;a href="http://www.oreillynet.com/pub/au/3112"&gt;James Reinders&lt;/a&gt; and I each gave concurrency webcast as part of Intel's fall webcast series. On Monday, James and I are going to be following that up with &lt;a href="http://softwarecommunity.intel.com/articles/eng/3675.htm"&gt;a virtual Town Hall panel discussion&lt;/a&gt; on concurrency, with Dr. Dobb's editor Jon Erickson as our moderator. Should be cool. And you are invited to attend. &lt;p&gt;Here are the coordinates: &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; Monday, December 3, 2007 &lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 9:00-10:00am U.S. Pacific Time &lt;p&gt;&lt;strong&gt;Registration:&lt;/strong&gt; &lt;a href="http://www.life20.net/intel1reg.php"&gt;http://www.life20.net/intel1reg.php&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Web simulcast&lt;/strong&gt; (doesn't require Second Life): &lt;a href="http://www.slcn.tv"&gt;http://www.slcn.tv&lt;/a&gt;&lt;/blockquote&gt; &lt;p&gt;I expect that most people will be watching the event via the live simulcast on Second Life Cable Network. Use that if you're not a Second Life member, or if you are a member but can't get in there because the SL servers are expected to reach their maximum capacity for a single event. &lt;p&gt;There's also a network breakfast before the town hall portion. Here's the full description, as it appears on Intel's site: &lt;blockquote&gt; &lt;h3&gt; &lt;h3&gt;SOFTWARE AND THE CONCURRENCY REVOLUTION: DESIGNING FOR MULTIPLE CORES &lt;/h3&gt;&lt;/h3&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;A virtual Town Hall held in Second Life by Intel Software Network and Dr. Dobb’s Journal&lt;/strong&gt; &lt;p&gt;December 3, 2007 8:00 AM – 11:00 AM Pacific Time (11:00 AM – 1:00 PM ET) on Intel and Dr Dobb’s Islands.  &lt;p&gt;&lt;strong&gt;Meet Intel and Industry experts, learn about parallel programming and concurrency trends, let your voice be heard.&lt;/strong&gt; &lt;p&gt;This half day event will begin with a networking breakfast on Dr. Dobbs Island where you will have the ability to meet some of Intel’s best engineers. Tim Mattson (Intel Principal Engineer, Designer of the 80 Core test chip parallel application and one of the creator’s of Open MP*) will give a brief introduction on our transition to a many-core world.  &lt;p&gt;Following breakfast, attendees will adjourn to Intel Island for the virtual town hall. This event will be moderated by Jonathan Erickson (Editorial Director, Dr. Dobb's) and will feature Herb Sutter (Architect, Microsoft, and chair of the ISO C++ Standards committee) and James Reinders (Chief Evangelist and Threading Guru for Intel Software Products) who will debate and discuss issues involved in realizing the promise of parallelization. As in any town Hall, your input will be vital.  &lt;p&gt;After the town Hall, Peretz Stine of Intel Island and Rissa Maidstone of Dr. Dobbs will lead tours of their respective islands.  &lt;p&gt;Schedule for December 3, 2007: &lt;br&gt;• 8:00-9:00 AM SLT – Networking Breakfast with Tim Mattson &lt;br&gt;• 9:00-10:00 AM SLT – Town Hall Meeting with Jon Erickson, James Reinders and Herb Sutter &lt;br&gt;• 10:00-11:00 AM SLT – Tour of Intel and Dr. Dobbs Islands  &lt;p&gt;You must register to reserve a place at this event: &lt;a href="http://www.life20.net/intel1reg.php"&gt;http://www.life20.net/intel1reg.php&lt;/a&gt;&lt;br&gt;This event will be simulcast live on Second Life Cable Network: &lt;a href="http://www.slcn.tv"&gt;http://www.slcn.tv&lt;/a&gt;&lt;/blockquote&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Concurrency+Town+Hall%3a+On+the+web%2c+this+Monday%2c+December+3&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!361.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!361.entry</guid><pubDate>Sat, 01 Dec 2007 00:30:48 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!361/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!361.entry#comment</wfw:comment><dcterms:modified>2007-12-01T00:30:48Z</dcterms:modified></item><item><title>Effective Concurrency: Avoid Calling Unknown Code While Inside a Critical Section</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!342.entry</link><description>&lt;div&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://ddj.com/architect/202802983"&gt;&lt;strong&gt;&amp;quot;Avoid Calling Unknown Code While Inside a Critical Section&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. Here's a teaser from the article's intro:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;Don't walk blindly into a deadly embrace... &lt;p&gt;Our world is built on modular, composable software. We routinely expect that we don't need to know about the internal implementation details of a library or plug-in to be able to use it correctly. &lt;p&gt;The problem is that locks, and most other kinds of synchronization we use today, are not modular or composable. That is, given two separately authored modules, each of which is provably correct but uses a lock or similar synchronization internally, we generally can't combine them and know that the result is still correct and will not deadlock. There are only two ways to combine such a pair of lock-using modules safely: ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;table cellspacing=5 cellpadding=5 width=555 border=0&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;July 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;August 2007 &lt;td valign=top width=422&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;September 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;tr&gt; &lt;td valign=top width=114&gt;October 2007 &lt;td valign=top width=422&gt;&lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;Apply Critical Sections Consistently&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Avoid+Calling+Unknown+Code+While+Inside+a+Critical+Section&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!342.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!342.entry</guid><pubDate>Tue, 06 Nov 2007 19:41:46 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!342/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!342.entry#comment</wfw:comment><dcterms:modified>2007-11-06T19:41:46Z</dcterms:modified></item><item><title>Effective Concurrency: Apply Critical Sections Consistently</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!310.entry</link><description>&lt;div&gt;The latest &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://www.ddj.com/hpc-high-performance-computing/202401098"&gt;&lt;strong&gt;&amp;quot;Apply Critical Sections Consistently&amp;quot;&lt;/strong&gt;&lt;/a&gt;, just went live on DDJ's site, and will also appear in the print magazine. Here's a teaser from the article's intro:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;p&gt;The critical section is our One True Tool for guaranteeing mutual exclusion on mutable shared variables. ... &lt;p&gt;[But critical sections] must be applied consistently, and with the intended meanings. A program must ensure that every use of a mutable shared object is properly protected using exactly one of these mechanisms at any given point in its lifetime. Chaos can erupt if code tries to avoid or invert these meanings (e.g., trying to abuse taking a lock or reading an atomic variable as a &amp;quot;critical section exit&amp;quot; operation; see Example 3), or tries to use inconsistent synchronization techniques at the same time.&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Next month's article is already in post-production. It delves into what I think is a really interesting rule, both because it's widely ignored and because it's full of surprises: &amp;quot;Avoid Calling Unknown Code While Inside a Critical Section.&amp;quot; I'll blog here when it hits the web about a month from now.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;ul&gt; &lt;li&gt;September 2007: &lt;a title="Use Critical Sections (Preferably Locks) to Eliminate Races" href="http://ddj.com/cpp/201804238"&gt;Use Critical Sections (Preferably Locks) to Eliminate Races&lt;/a&gt; &lt;li&gt;August 2007: &lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt;  &lt;li&gt;July 2007: &lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Apply+Critical+Sections+Consistently&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!310.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!310.entry</guid><pubDate>Wed, 10 Oct 2007 23:25:42 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!310/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!310.entry#comment</wfw:comment><dcterms:modified>2007-10-10T23:25:42Z</dcterms:modified></item><item><title>Effective Concurrency: Use Critical Sections (Preferably Locks) to Eliminate Races</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!287.entry</link><description>&lt;div&gt;&lt;strong&gt;&amp;quot;In a race, no one can hear you scream.&amp;quot;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;That's my tagline for the third &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column, &lt;a href="http://ddj.com/cpp/201804238"&gt;&lt;strong&gt;&amp;quot;Use Critical Sections (Preferably Locks) to Eliminate Races.&amp;quot;&lt;/strong&gt;&lt;/a&gt; It just went live on DDJ's site, and will also appear in the print magazine.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;This article focuses on two main things:&lt;/div&gt; &lt;ul&gt; &lt;li&gt;The detailed facts of life about why most or all bets are off if you have a data race. You really, really, really don't want to have any races in your code. &lt;li&gt;The commonality that unifies all synchronization constructs you've ever used or will use, from locking to lock-free styles to fences to transactional memory.&lt;/ul&gt; &lt;p&gt;Here's the article's intro: &lt;blockquote dir=ltr&gt; &lt;p&gt;Everyone knows the basics of how to use locks: &lt;p&gt;  mut.lock(); // acquire lock on x&lt;br&gt;  ... read/write x ...&lt;br&gt;  mut.unlock(); // release lock on x &lt;p&gt;But why do locks, lock-free styles, and other synchronization techniques work at all, never mind interoperate well with each other and with aggressive optimizers that transform and reorder your program to make it run faster? Because every synchronization technique you've ever heard of must express, and every optimization that may ever be performed must respect and uphold, the common fundamental concept of a &lt;em&gt;critical section&lt;/em&gt;. ...&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Next month's article is already in post-production. It follows directly from this one, and will be titled &amp;quot;Apply Critical Sections Consistently.&amp;quot; I'll blog here when it hits the web about a month from now.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are links to previous Effective Concurrency columns (based on the dates they hit the web, not the magazine print issue dates):&lt;/div&gt; &lt;ul&gt; &lt;li&gt;August 2007: &lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;How Much Scalability Do You Have or Need?&lt;/a&gt; &lt;li&gt;July 2007: &lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+Use+Critical+Sections+(Preferably+Locks)+to+Eliminate+Races&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!287.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!287.entry</guid><pubDate>Wed, 05 Sep 2007 20:36:08 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!287/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!287.entry#comment</wfw:comment><dcterms:modified>2007-09-05T20:36:08Z</dcterms:modified></item><item><title>Effective Concurrency: How Much Scalability Do You Have or Need?</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!269.entry</link><description>&lt;div&gt;The second &lt;strong&gt;Effective Concurrency&lt;/strong&gt; column in &lt;a href="http://ddj.com"&gt;DDJ&lt;/a&gt; just went live. It's titled &lt;a href="http://www.ddj.com/hpc-high-performance-computing/201202924"&gt;&lt;strong&gt;&amp;quot;How Much Scalability Do You Have or Need?&amp;quot;&lt;/strong&gt;&lt;/a&gt; and makes the case that there's more than just one important category of throughput scalability, and one size does not fit all. From the article:&lt;/div&gt; &lt;blockquote dir=ltr&gt; &lt;div&gt;In your application, how many independent pieces of work are ready to run at any given time? Put another way, how many cores (or hardware threads, or nodes) can your code harness to get its answers faster? And when should the answers to these questions &lt;em&gt;not&lt;/em&gt; be &amp;quot;as many as possible&amp;quot;?&lt;/div&gt;&lt;/blockquote&gt; &lt;div&gt;I hope you enjoy it.&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Next month's article is already in post-production. It will be titled &amp;quot;Use Critical Regions (Preferably Locks) to Eliminate Races&amp;quot; and will hit the web about a month from now. One of the early questions it answers is, How bad can a race be? There's a hint in the article's tagline: &lt;em&gt;&amp;quot;In a race no one can hear you scream...&amp;quot;&lt;/em&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Finally, here are some links to last month's Effective Concurrency column and to a prior locking article of interest that provides a nice background motivation for the next few EC articles to come starting next month:&lt;/div&gt; &lt;ul&gt; &lt;li&gt;July 2007: &lt;a href="http://www.ddj.com/hpc-high-performance-computing/200001985"&gt;The Pillars of Concurrency&lt;/a&gt; &lt;li&gt;March 2005: &lt;a href="http://www.ddj.com/cpp/184401930"&gt;The Trouble With Locks&lt;/a&gt;&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+Effective+Concurrency%3a+How+Much+Scalability+Do+You+Have+or+Need%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!269.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!269.entry</guid><pubDate>Fri, 03 Aug 2007 16:18:34 GMT</pubDate><slash:comments>8</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!269/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!269.entry#comment</wfw:comment><dcterms:modified>2007-08-03T20:45:00Z</dcterms:modified></item><item><title>EC: A new column on Effective Concurrency</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!250.entry</link><description>&lt;div&gt;I'm pleased to say that I'm starting a new column on &lt;strong&gt;Effective Concurrency&lt;/strong&gt; in &lt;a href="http://ddj.com"&gt;DDJ&lt;/a&gt;, and the first installment just went live.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;It's titled &lt;a href="http://ddj.com/dept/architect/200001985"&gt;&lt;strong&gt;&amp;quot;The Pillars of Concurrency&amp;quot;&lt;/strong&gt;&lt;/a&gt; and tries to make the case that we need to have a consistent mental model for talking about concurrency issues if we're going to make any serious headway in designing and using concurrent systems. In particular, as the article notes:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;Have you ever talked with another developer about concurrency, and felt as though you were somehow speaking completely different languages? If so, you're not alone. You can see the confusion in our vocabulary...&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;Next month's article is already in post-production. It's titled &amp;quot;How Much Scalability Do You Have or Need?&amp;quot; and it'll be online about a month from now. I'll let you know here once it hits the web.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;And who knows? If this &lt;a href="http://www.amazon.com/Effective-Specific-Improve-Programs-Design/dp/0201924889"&gt;newfangled essential-Items-at-3-to-5-pages-each format&lt;/a&gt; turns out to be popular, there just might eventually be a book here...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+EC%3a+A+new+column+on+Effective+Concurrency&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!250.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!250.entry</guid><pubDate>Tue, 03 Jul 2007 20:48:37 GMT</pubDate><slash:comments>22</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!250/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!250.entry#comment</wfw:comment><dcterms:modified>2007-07-03T20:48:37Z</dcterms:modified></item><item><title>EC -10 days</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!241.entry</link><description>&lt;div&gt;More to come...&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+EC+-10+days&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!241.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!241.entry</guid><pubDate>Sun, 24 Jun 2007 21:08:42 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!241/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!241.entry#comment</wfw:comment><dcterms:modified>2007-06-24T21:08:42Z</dcterms:modified></item><item><title>OGDC Talk Slides Online</title><link>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!223.entry</link><description>&lt;p&gt;I've been getting a fair number of requests for my slides from last week's keynote at OGDC. &lt;a href="http://www.gotw.ca/resources/Software and Concurrency - OGDC.pdf"&gt;They're now available here.&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=3261494312968475067&amp;page=RSS%3a+OGDC+Talk+Slides+Online&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=herbsutter.spaces.live.com&amp;amp;GT1=herbsutter"&gt;</description><comments>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!223.entry#comment</comments><guid isPermaLink="true">http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!223.entry</guid><pubDate>Thu, 17 May 2007 23:40:50 GMT</pubDate><slash:comments>10</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!223/comments/feed.rss</wfw:commentRss><wfw:comment>http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!223.entry#comment</wfw:comment><dcterms:modified>2007-05-17T23:41:32Z</dcterms:modified></item></channel></rss>