<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Sutter's Mill</title>
	<atom:link href="http://herbsutter.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://herbsutter.wordpress.com</link>
	<description>Herb Sutter on software, hardware, and concurrency</description>
	<lastBuildDate>Thu, 12 Nov 2009 09:26:57 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='herbsutter.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/4554b8d24c7f200dc5e2e1b18db1893f?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Sutter's Mill</title>
		<link>http://herbsutter.wordpress.com</link>
	</image>
			<item>
		<title>Trip Report: October 2009 ISO C++ Standards Meeting</title>
		<link>http://herbsutter.wordpress.com/2009/11/11/trip-report-october-2008-iso-c-standards-meeting/</link>
		<comments>http://herbsutter.wordpress.com/2009/11/11/trip-report-october-2008-iso-c-standards-meeting/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 03:45:11 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/11/11/trip-report-october-2008-iso-c-standards-meeting/</guid>
		<description><![CDATA[The ISO C++ committee met in Santa Cruz, CA, USA on October 19-24. You can find the minutes here, which include the votes at the whole-group sessions but not the details of the breakout technical sessions where we spend most of the week.
The good news is that there’s little new technical news. We did a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=317&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The ISO C++ committee met in Santa Cruz, CA, USA on October 19-24. You can find <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n3004.pdf">the minutes here</a>, which include the votes at the whole-group sessions but not the details of the breakout technical sessions where we spend most of the week.</p>
<p>The good news is that there’s little new technical news. We did a lot of work during the week, but it was mostly working on refining the standard, deciding integration questions of how two language features should work together in cases not clearly described, fixing bugs, and answering national body comments on our first public draft last fall (those are now nearly all answered). We expect to produce another public draft at our next meeting in March.</p>
<p>We did vote in one small feature that I and Lawrence Crowl in particular had been working on: a simple async() facility to launch asynchronous work easily without messing with packaged_tasks and raw threads. Here’s a sample use, also demonstrating a simple use of the futures library and a lambda function for kicks:</p>
<pre>  future f = std::async( []{ OtherWork(); } );

  //... do our own work concurrently with OtherWork ...

  OkayNowWeNeedTheResult( f.get() );  // blocks if necessary until f is ready</pre>
<p>If you’ve been following the futures library, you’ll notice a name change above: We also renamed unique_future&lt;T&gt; to just plain future&lt;T&gt; as part of recasting the futures wording to make it clearer and more consistent. That’s an example of the kind of cleanup work being done.</p>
<p>Near the end of the meeting, we also discussed deprecating export (as I reported <a href="http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/">earlier</a>) and exception specifications other than throw()-nothing. There seemed to be significant support for deprecating both, and so we’ll probably see a concrete proposal at our next meeting.</p>
<p>In sad news, the convener (chair) of the committee for the past year, P.J. Plauger, stepped down at the end of the meeting. After I had been the convener for two three-year terms from 2002 to 2008, I decided it was time for someone else to have a go and so Plauger <a href="http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/">replaced me a year ago</a>. He has done a really great job over the past year and his contributions in that role will be missed, but we won’t lose his services entirely as he remains an active participant in the committee. I will probably volunteer again to replace him.</p>
<p>That’s pretty much it. The next meeting of the ISO C++ standards committee is in March:</p>
<ul>
<li>March 8-13, 2010: <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2956.pdf">Pittsburgh, PA, USA</a> </li>
</ul>
<p>(Edited to fix “2009” in the title and add a link to the Pittsburgh meeting invitation.)</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/317/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=317&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/11/11/trip-report-october-2008-iso-c-standards-meeting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Prefer structured lifetimes – local, nested, bounded, deterministic.</title>
		<link>http://herbsutter.wordpress.com/2009/11/11/effective-concurrency-prefer-structured-lifetimes-%e2%80%93-local-nested-bounded-deterministic/</link>
		<comments>http://herbsutter.wordpress.com/2009/11/11/effective-concurrency-prefer-structured-lifetimes-%e2%80%93-local-nested-bounded-deterministic/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 18:33:15 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Effective Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/?p=313</guid>
		<description><![CDATA[This month’s Effective Concurrency column, Prefer  structured lifetimes – local, nested, bounded, deterministic, is now live on  DDJ’s website.
From the article:
Where possible, prefer structured lifetimes: ones that are local, nested,  bounded, and deterministic. This is true no matter what kind of lifetime we’re  considering, including object lifetimes, thread or task lifetimes, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=313&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=221601309">Prefer  structured lifetimes – local, nested, bounded, deterministic</a>, is now live on  DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p>Where possible, prefer structured lifetimes: ones that are local, nested,  bounded, and deterministic. This is true no matter what kind of lifetime we’re  considering, including object lifetimes, thread or task lifetimes, lock  lifetimes, or any other kind. …</p></blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective  Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The  Pillars of Concurrency</a> (Aug 2007)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How  Much Scalability Do You Have or Need?</a> (Sep 2007)</p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably  Locks) to Eliminate Races</a> (Oct 2007)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply  Critical Sections Consistently</a> (Nov 2007)</p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While  Inside a Critical Section</a> (Dec 2007)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use  Lock Hierarchies to Avoid Deadlock</a> (Jan 2008)</p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going  Superlinear</a> (Mar 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super  Linearity and the Bigger Machine</a> (Apr 2008)</p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May  2008)</p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize  Contention</a> (Jun 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose  Concurrency-Friendly Data Structures</a> (Jul 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The  Many Faces of Deadlock</a> (Aug 2008)</p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of  Security</a> (Sep 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing  Lock-Free Code: A Corrected Queue</a> (Oct 2008)</p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent  Queue</a> (Nov 2008)</p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel  Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring  Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs.  volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing  Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use  Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">Use  Thread Pools Correctly: Keep Tasks Short and Nonblocking</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">Eliminate  False Sharing</a> (May 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">Break  Up and Interleave Work to Keep Threads Responsive</a> (Jun 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=218401447">The  Power of “In Progress”</a> (Jul 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=219200099">Design  for Manycore Systems</a> (Aug 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=220600388">Avoid  Exposing Concurrency – Hide It Inside Synchronous Methods</a> (Oct 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=221601309">Prefer  structured lifetimes – local, nested, bounded, deterministic</a> (Nov  2009)</p></blockquote>
Posted in Concurrency, Effective Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=313&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/11/11/effective-concurrency-prefer-structured-lifetimes-%e2%80%93-local-nested-bounded-deterministic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Other Concurrency Sessions at PDC&#8217;09</title>
		<link>http://herbsutter.wordpress.com/2009/11/04/other-concurrency-sessions-at-pdc09/</link>
		<comments>http://herbsutter.wordpress.com/2009/11/04/other-concurrency-sessions-at-pdc09/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:08:07 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/11/04/other-concurrency-sessions-at-pdc09/</guid>
		<description><![CDATA[&#160;
I mentioned yesterday that I’ll be involved in two sessions at PDC09, including a parallel patterns tutorial. I know many of you are interested in concurrency in general and on Microsoft platforms in particular, so I thought I’d share this more complete list of concurrency-related sessions at PDC, put together by my colleague Stephen Toub.
Overview:

The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=309&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&nbsp;</p>
<p>I mentioned yesterday that I’ll be involved in two sessions at <a href="http://microsoftpdc.com/">PDC09</a>, including a parallel patterns tutorial. I know many of you are interested in concurrency in general and on Microsoft platforms in particular, so I thought I’d share this more complete list of concurrency-related sessions at PDC, put together by my colleague Stephen Toub.</p>
<p>Overview:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/P09-17">The State of Parallel Programming</a></li>
<li><a href="http://microsoftpdc.com/Sessions/Patterns-of-Parallel-Programming">Patterns of Parallel Programming: A Tutorial on Fundamental Patterns and Practices for Parallelism</a></li>
</ul>
<p>Native code in Visual Studio 2010:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/SVR30">A Computing Platform That Scales</a></li>
<li><a href="http://microsoftpdc.com/Sessions/SVR10">Lighting up Windows Server 2008 R2 Using the ConcRT on UMS</a></li>
<li><a href="http://microsoftpdc.com/Sessions/FT19">C++ Forever: Interactive Applications in the Age of Manycore</a></li>
</ul>
<p>Managed code in Visual Studio 2010:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/P09-09">Manycore and the Microsoft .NET Framework 4: A Match Made in Microsoft Visual Studio 2010</a></li>
<li><a href="http://microsoftpdc.com/Sessions/FT21">PLINQ: LINQ, but Faster!</a></li>
<li><a href="http://microsoftpdc.com/Sessions/FT20">F# for Parallel and Asynchronous Programming</a></li>
</ul>
<p>HPC Server:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/P09-01">Accelerating Applications Using Windows HPC Server 2008</a></li>
</ul>
<p>Research and Incubation:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/VTL02">Axum: A .NET Language for Safe and Scalable Concurrency</a></li>
<li><a href="http://microsoftpdc.com/Sessions/VTL32">Concurrency Fuzzing &amp; Data Races</a></li>
<li><a href="http://microsoftpdc.com/Sessions/SVR17">Data-Intensive Computing on Windows HPC Server with the DryadLINQ Framework</a></li>
<li><a href="http://microsoftpdc.com/Sessions/VTL04">Rx: Reactive Extensions for .NET</a></li>
<li><a href="http://microsoftpdc.com/Sessions/FT51">Future of Garbage Collection</a></li>
</ul>
Posted in Concurrency, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/309/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/309/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/309/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/309/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/309/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/309/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/309/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/309/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/309/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/309/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=309&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/11/04/other-concurrency-sessions-at-pdc09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>PDC&#8217;09: Tutorial &amp; Panel</title>
		<link>http://herbsutter.wordpress.com/2009/11/03/pdc09-tutorial-panel/</link>
		<comments>http://herbsutter.wordpress.com/2009/11/03/pdc09-tutorial-panel/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 01:13:21 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/11/03/pdc09-tutorial-panel/</guid>
		<description><![CDATA[For those of you coming to PDC’09 in Los Angeles a couple of weeks from now, I’ll be there for a few hours on Monday and Wednesday participating in two events:

Patterns of Parallel Programming: A Tutorial on Fundamental Patterns and Practices for Parallelism. The full-day tutorial is full of useful information. I’ll be giving the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=308&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>For those of you coming to <a href="http://microsoftpdc.com/">PDC’09 in Los Angeles</a> a couple of weeks from now, I’ll be there for a few hours on Monday and Wednesday participating in two events:</p>
<ul>
<li><a href="http://microsoftpdc.com/Sessions/Patterns-of-Parallel-Programming"><strong>Patterns of Parallel Programming: A Tutorial on Fundamental Patterns and Practices for Parallelism.</strong></a> The full-day tutorial is full of useful information. I’ll be giving the first hour or so as an intro/overview; if you’ve seen my high-level concurrency talks you’ll recognize much of it, but it’ll also have a slant toward patterns of course to set up the day. The rest of the tutorial will be presented by my colleagues <a href="http://microsoftpdc.com/Speakers/Richard-Ciapala">Richard Ciapata</a>, <a href="http://microsoftpdc.com/Speakers/Ade-Miller">Ade Miller</a>, and <a href="http://microsoftpdc.com/Speakers/Stephen-Toub">Stephen Toub</a>.</li>
<li><a href="http://microsoftpdc.com/Sessions/FT52"><strong>Panel: Microsoft Perspectives on the Future of Programming.</strong></a> This one’s going to be a blast. You can judge just from the names of my heavyweight fellow panelists: <a href="http://research.microsoft.com/en-us/um/people/blampson/">Butler Lampson</a>, <a href="http://www.microsoft.com/presspass/exec/techfellow/Smith/default.mspx">Burton Smith</a>, <a href="http://www.microsoft.com/presspass/exec/de/Box/default.mspx">Don Box</a>, <a href="http://research.microsoft.com/en-us/um/people/emeijer/">Erik Meijer</a>, and <a href="http://www.microsoft.com/presspass/exec/de/snover/default.mspx">Jeffrey Snover</a>. Anytime you get a chance to watch or attend a talk by any of these, do. If you get a chance to come to this panel when they’re all on one stage, <em>definitely </em>do. As Bill Shatner might put it: “Do. Not Miss!”</li>
</ul>
<p>See you at PDC!</p>
Posted in Concurrency, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/308/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=308&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/11/03/pdc09-tutorial-panel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Hoare on Testing</title>
		<link>http://herbsutter.wordpress.com/2009/10/26/hoare-on-testing/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/26/hoare-on-testing/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:42:13 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/26/hoare-on-testing/</guid>
		<description><![CDATA[On the flight to the ISO C standards meeting this morning, I was reading this month’s issue of CACM, and found that Sir C.A.R. (Tony) Hoare wrote a nice piece called Retrospective: An Axiomatic Basis for Computer Programming.
Hoare has long been a noted proponent of axioms and formal proofs of program correctness. In that light, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=305&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>On the flight to the ISO C standards meeting this morning, I was reading this month’s issue of CACM, and found that <a href="http://en.wikipedia.org/wiki/C._A._R._Hoare">Sir C.A.R. (Tony) Hoare</a> wrote a nice piece called <a href="http://cacm.acm.org/magazines/2009/10/42360-retrospective-an-axiomatic-basis-for-computer-programming/fulltext"><strong>Retrospective: An Axiomatic Basis for Computer Programming</strong></a>.</p>
<p>Hoare has long been a noted proponent of axioms and formal proofs of program correctness. In that light, the following passage on testing and axioms struck me as well put and I thought I’d share it (emphasis added):</p>
<blockquote><p>One thing I got spectacularly wrong. I could see that programs were getting larger, and I thought that testing would be an increasingly ineffective way of removing errors from them. I did not realize that <strong>the success of tests is that they test the programmer, not the program</strong>. Rigorous testing regimes rapidly persuade error-prone programmers (like me) to remove themselves from the profession. Failure in test immediately punishes any lapse in programming concentration, and (just as important) <strong>the failure count enables implementers to resist management pressure for premature delivery of unreliable code</strong> <em><font color="#808080">[or forces management to be explicitly unreasonable in the face of bug bar data and specific failure cases having an objective severity –hps]</font></em>. The experience, judgment, and intuition of programmers who have survived the rigors of testing are what make programs of the present day useful, efficient, and (nearly) correct. Formal methods for achieving correctness must support the intuitive judgment of programmers, not replace it.</p>
<p>My basic mistake was to set up proof in opposition to testing, where in fact both of them are valuable and mutually supportive ways of accumulating evidence of the correctness and serviceability of programs. …</p>
</blockquote>
<p>He also mentions many other useful observations and reminds, including the value of assertions to find, not run-time errors, but programming bugs. (See also <em><a href="http://www.gotw.ca/publications/c++cs.htm">C++ Coding Standards</a></em> Item 68: Assert liberally to document internal assumptions and invariants.)</p>
<p>The whole article is good reading, and not long. Recommended.</p>
Posted in Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=305&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/26/hoare-on-testing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Deprecating export considered for ISO C++0x</title>
		<link>http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:32:09 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/</guid>
		<description><![CDATA[How interesting.
I’m at the ISO C++ meeting in Santa Cruz, CA, USA this week. Ten minutes ago we had a committee straw poll about whether we should remove, deprecate, or leave as-is the export template feature for C++0x. The general sentiment was to remove or deprecate it, with deprecation getting the strongest support because it’s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=303&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>How interesting.</p>
<p>I’m at the ISO C++ meeting in Santa Cruz, CA, USA this week. Ten minutes ago we had a committee straw poll about whether we should remove, deprecate, or leave as-is the export template feature for C++0x. The general sentiment was to remove or deprecate it, with deprecation getting the strongest support because it’s safer per ISO procedure. Deprecation would not remove it from C++0x, but would put the world on notice that the committee is considering removing it from a future standard.</p>
<p><strong>Note: Nothing is happening to export at this meeting.</strong> The effect of this straw poll of the committee was to give guidance to the core language working group (CWG) on the committee’s general sentiment on this issue. The CWG is taking this as guidance to produce a detailed proposal to take some action on export at our next meeting in Pittsburgh in March.</p>
<p>I’ll write a longer trip report in the next week, but this was worth noting in real time because it’s the first time export template has been discussed in committee since the highly controversial discussion of my and Tom Plum’s proposal to remove export at the Oxford meeting in 2003.</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/303/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=303&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>A Concurrency Poll</title>
		<link>http://herbsutter.wordpress.com/2009/10/21/a-concurrency-poll/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/21/a-concurrency-poll/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 12:33:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/21/a-concurrency-poll/</guid>
		<description><![CDATA[I’ve opened up a short concurrency poll to get a sense of what concurrency issues are top-of-mind for programmers, and I’d appreciate it if you could take a few minutes to participate. Some questions are about what you want to learn more about, others about your tools of choice in specific areas, and a few [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=300&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I’ve opened up <a href="http://www.surveygizmo.com/s/193214/apw36">a short concurrency poll</a> to get a sense of what concurrency issues are top-of-mind for programmers, and I’d appreciate it if you could take a few minutes to participate. Some questions are about what you want to learn more about, others about your tools of choice in specific areas, and a few are slightly whimsical. I plan to use the results as input to topics to cover in future Effective Concurrency articles and talks, so by participating you&#8217;ll help influence the direction of future EC topics.</p>
<p>There are about 28 questions, each asking for just a word or a phrase in answer. Here again is the link: <a href="http://www.surveygizmo.com/s/193214/apw36">http://www.surveygizmo.com/s/193214/apw36</a></p>
<p>Thank you in advance for taking a few minutes to participate. If you&#8217;re interested in receiving a summary of the survey results, please leave your email address at the end of the survey and I&#8217;ll send you a copy (your email will not be used for any other purpose).</p>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/300/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=300&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/21/a-concurrency-poll/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Mailbag: Shutting up compiler warnings</title>
		<link>http://herbsutter.wordpress.com/2009/10/18/mailbag-shutting-up-compiler-warnings/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/18/mailbag-shutting-up-compiler-warnings/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 00:37:10 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/18/mailbag-shutting-up-compiler-warnings/</guid>
		<description><![CDATA[I recently received the following reader question (slightly edited):
About the (Stroustrup) approach of implementing IsDerivedFrom at page 27 in your book More Exceptional C++: […] why the second pointer assignment in:
static void Constraints(D* p)
{
B* pb=p; // okay, D better inherit from B&#8230;
 pb=p; // huh? why this again?
}
Isn&#8217;t the initialization &#8221; B* pb=p &#8221; enough? [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=299&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently received the following reader question (slightly edited):</p>
<blockquote><p>About the (Stroustrup) approach of implementing IsDerivedFrom at page 27 in your book <a href="http://www.gotw.ca/publications/mxc++.htm"><strong>More Exceptional C++</strong></a>: […] why the second pointer assignment in:</p>
<p>static void Constraints(D* p)<br />
{<br />
B* pb=p; // okay, D better inherit from B&#8230;<br />
<strong> pb=p; // </strong><span style="color:#ff0000;"><strong>huh? why this again?<br />
</strong></span>}</p>
<p>Isn&#8217;t the initialization &#8221; B* pb=p &#8221; enough? What does the second assignment bring to the picture?</p></blockquote>
<p>Excellent question. Interestingly, here’s the exact text from the book, which contains an additional comment that was intended to answer this specific question (emphasis added):</p>
<blockquote><p>static void Constraints(D* p)<br />
{<br />
B* pb = p;<br />
<strong> pb = p; // suppress warnings about unused variables<br />
</strong>}</p></blockquote>
<p>The reason for the redundant assignment is to try to shut up some compilers that issue warnings about unused variables. In a normal function, this is a helpful warning because, <a href="http://www.randomhouse.com/wotd/index.pperl?date=19970210">dollars to donuts</a>, it’s a mistake and the programmer meant to use the variable but forgot or accidentally used some other variable instead. In this case, without the second line, pb is declared but never mentioned again, and by adding the extra line that mentions it one more time after its declaration, some compilers stop complaining.</p>
<p>Sometimes, however, we’re intentionally not using the variable, such as in this case where the only purpose of the function is to ensure that code that tries to convert a D* to a B* is compilable. (Note: There are other/better ways to achieve this. See the rest of Item 27 for superior approaches.)</p>
<p>However, in practice even the line “pb = p;” doesn’t shut compilers up very much, because many will still notice that now the second assigned value isn’t used, and will helpfully remind you that you probably didn’t mean to write an apparently useless “dead write” that is never read again. Most compilers offer a compiler-specific #pragma or other nonportable extension to silence this warning, but wouldn’t it be nice to have a portable way to suppress the warning that will work on all compilers?</p>
<p>Here’s a simple one-liner that works on all compilers I tried, and should not incur any overhead: Define an empty function template that takes any object by reference, but doesn’t actually do anything with it and so the empty function body should compile down to nothing. Let’s call it “ignore” – you can put it into your project namespace to avoid collisions on that common name.</p>
<pre>  template&lt;class T&gt; void ignore( const T&amp; ) { }</pre>
<p>Note that ignore&lt;T&gt;’s parameter does not need a name; in fact, it had better not have a name or else you’ll get the same compiler warning as before about an unused variables, only in a new place.</p>
<p>Using ignore is easy. When you want to suppress the compiler warning, just write:</p>
<pre>  static void Constraints(D* p)</pre>
<pre>  {</pre>
<pre>    B* pb = p;</pre>
<pre><strong><span style="color:#ff0000;">    ignore(pb); // portably suppresses the warning</span></strong></pre>
<pre>  }</pre>
<p>Now all compilers I tried agree that the variable is “used” and stop complaining about pb.</p>
<p>[Oct 20: Updated  to add "const" on ignore&lt;T&gt;'s parameter to also handle rvalues.]</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=299&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/18/mailbag-shutting-up-compiler-warnings/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>whois terry.crowley</title>
		<link>http://herbsutter.wordpress.com/2009/10/14/whois-terry-crowley/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/14/whois-terry-crowley/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 20:25:33 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Opinion & Editorial]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/14/whois-terry-crowley/</guid>
		<description><![CDATA[Astute readers may have noticed that Terry Crowley’s name frequently crops up in the Acknowledgments section of my Effective Concurrency columns. Who is Terry? To answer, Mary-Jo Foley profiles him this week.
Posted in Concurrency, Opinion &#38; Editorial       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=298&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Astute readers may have noticed that Terry Crowley’s name frequently crops up in the Acknowledgments section of my Effective Concurrency columns. Who is Terry? To answer, Mary-Jo Foley <a href="http://blogs.zdnet.com/microsoft/?p=4240">profiles him</a> this week.</p>
Posted in Concurrency, Opinion &amp; Editorial  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/298/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=298&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/14/whois-terry-crowley/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Avoid Exposing Concurrency &#8211; Hide It Inside Synchronous Methods</title>
		<link>http://herbsutter.wordpress.com/2009/10/12/effective-concurrency-avoid-exposing-concurrency-hide-it-inside-synchronous-methods/</link>
		<comments>http://herbsutter.wordpress.com/2009/10/12/effective-concurrency-avoid-exposing-concurrency-hide-it-inside-synchronous-methods/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 23:59:53 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C# / .NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Effective Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/10/12/effective-concurrency-avoid-exposing-concurrency-hide-it-inside-synchronous-methods/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, Avoid Exposing Concurrency – Hide It Inside Synchronous Methods, is now live on DDJ’s website.
From the article:
You have a mass of existing code and want to add concurrency. Where do you start?
Let’s say you need to migrate existing code to take advantage of concurrent execution or scale on parallel hardware. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=297&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=220600388">Avoid Exposing Concurrency – Hide It Inside Synchronous Methods</a>, is now live on DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p><em>You have a mass of existing code and want to add concurrency. Where do you start?</em></p>
<p>Let’s say you need to migrate existing code to take advantage of concurrent execution or scale on parallel hardware. In that case, you’ll probably find yourself in one of these two common situations, which are actually more similar than different:</p>
<ul>
<li>Migrating an application: You’re an application developer, and you want to migrate your existing synchronous application to be able to benefit from concurrency.</li>
<li>Migrating a library or framework: You’re a developer on a team that produces a library or framework used by other teams or external customers, and you want to let the library take advantage of concurrency on behalf of the application without requiring application code rewrites.</li>
</ul>
<p>You have a mountain of opportunities and obstacles before you. Where do you start?</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">Use Thread Pools Correctly: Keep Tasks Short and Nonblocking</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">Eliminate False Sharing</a> (May 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">Break Up and Interleave Work to Keep Threads Responsive</a> (Jun 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=218401447">The Power of “In Progress”</a> (Jul 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=219200099">Design for Manycore Systems</a> (Aug 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=220600388">Avoid Exposing Concurrency – Hide It Inside Synchronous Methods</a> (Oct 2009)</p>
</blockquote>
Posted in C# / .NET, C++, Concurrency, Effective Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/297/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=297&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/10/12/effective-concurrency-avoid-exposing-concurrency-hide-it-inside-synchronous-methods/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>&#8220;What&#8217;s the Best Way To Process a Pool of Work?&#8221;</title>
		<link>http://herbsutter.wordpress.com/2009/09/28/whats-the-best-way-to-process-a-pool-of-work/</link>
		<comments>http://herbsutter.wordpress.com/2009/09/28/whats-the-best-way-to-process-a-pool-of-work/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 22:34:16 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/09/28/whats-the-best-way-to-process-a-pool-of-work/</guid>
		<description><![CDATA[“What’s the best way to process a pool of work?” is a recurring question. As usual, the answer is “it depends” because the optimal answer often depends on both the characteristics of the work itself and the constraints imposed by run-time system resources.
For example, I recently received the following email from reader Sören Meyer-Eppler, where [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=296&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>“What’s the best way to process a pool of work?” is a recurring question. As usual, the answer is “it depends” because the optimal answer often depends on both the characteristics of the work itself and the constraints imposed by run-time system resources.</p>
<p>For example, I recently received the following email from reader Sören Meyer-Eppler, where the key was to avoid oversubscribing system resources (in this case, memory):</p>
<blockquote><p>I have an application that has multiple threads processing work from a todo queue. I have no influence over what gets into the queue and in what order (it is fed externally by the user). A single work item from the queue may take anywhere between a couple of seconds to several hours of runtime and should not be interrupted while processing. Also, a single work item may consume between a couple of megabytes to around 2GBs of memory. The memory consumption is my problem. I&#8217;m running as a 64bit process on a 8GB machine with 8 parallel threads. If each of them hits a worst case work item at the same time I run out of memory. I&#8217;m wondering about the best way to work around this.</p>
<p>1. plan conservatively and run 4 threads only. The worst case shouldn&#8217;t be a problem anymore, but we waste a lot of parallelism, making the average case a lot slower.</p>
<p>2. make each thread check available memory (or rather total allocated memory by all threads) before starting with a new item. Only start when more than 2GB memory are left. Recheck periodically, hoping that other threads will finish their memory hogs and we may start eventually. Still dangerous if the check happens when all threads are just starting out with their allocations.</p>
<p>3. try to predict how much memory items from the queue will need (hard) and plan accordingly. We could reorder the queue (overriding user choice) or simply adjust the number of running worker threads.</p>
<p>4. more ideas?</p>
<p>I&#8217;m currently tending towards number 2 because it seems simple to implement and solve most cases. However, I&#8217;m still wondering what standard ways of handling situations like this exist? The operating system must do something very similar on a process level after all&#8230;</p>
</blockquote>
<p>I replied:</p>
<blockquote><p>I don&#8217;t have time to write a detailed answer right now, but also consider two queues (one for big tasks and one for small tasks), or having work items give a rough size estimate (possibly by doing an extra lightweight pass over the data up front).</p>
<p>May I post an extract of your mail on my blog? Then others may comment and provide useful hints.</p>
</blockquote>
<p>He said yes, and so here it is for your consideration.</p>
<p>Note also <a href="http://groups.google.com/group/comp.programming.threads/browse_thread/thread/ea1bc898bbc103e0">this similar question</a> that came up a few days ago on comp.programming threads, but with different constraints &#8212; in that case, it was about avoiding idleness rather than avoiding oversubscription.</p>
Posted in Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/296/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=296&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/09/28/whats-the-best-way-to-process-a-pool-of-work/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>When is a zero-length array okay?</title>
		<link>http://herbsutter.wordpress.com/2009/09/02/when-is-a-zero-length-array-okay/</link>
		<comments>http://herbsutter.wordpress.com/2009/09/02/when-is-a-zero-length-array-okay/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 12:41:25 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/09/02/when-is-a-zero-length-array-okay/</guid>
		<description><![CDATA[I just received a reader email that asked about GotW #42:
You write &#34;Non-Problem: Zero-Length Arrays Are Okay&#34;, but both 14882:2003 and N2914 &#34;[dcl.array]&#34; say &#34;If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.&#34;. Shall we assume that you overrule the standard? :-) Or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=290&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just received a reader email that asked about <a href="http://www.gotw.ca/gotw/042.htm">GotW #42</a>:</p>
<blockquote><p>You write &quot;<strong>Non-Problem: Zero-Length Arrays Are Okay</strong>&quot;, but both 14882:2003 and N2914 &quot;[dcl.array]&quot; say &quot;If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.&quot;. Shall we assume that you overrule the standard? :-) Or am I missing something, like the meaning of &quot;derived-declarator-type-list&quot; (I can&#8217;t find it anywhere in 14882:2003)?</p>
</blockquote>
<p>I thought the answer might be of interest to other people, so I’m posting it here.</p>
<p>First, this reader gets kudos for consulting not only the ISO C++ standard, but also the current C++0x working draft from June (paper N2914), to do research before asking the question. Good stuff.</p>
<p>He also gets a small penalty point, though, for reading only the subhead text that he quoted from GotW #42, and not the actual short passage the heading introduces. The article already contains the answer to his qustion, and that answer is still the same in the current C++0x draft all these years later:</p>
<blockquote><p>From 5.3.4 [expr.new], paragraph 7:</p>
<p>When the value of the expression in a direct-new-declarator is zero, the allocation function is called to allocate an array with no elements. The pointer returned by the new-expression is non-null. [Note: If the library allocation function is called, the pointer returned is distinct from the pointer to any other object.]</p>
</blockquote>
<p>So the reader is quoting from 8.3.4 [dcl.array], which governs non-heap allocated arrays (e.g., T array[N];). In that case, a zero length is not allowed by the standard. You can’t rely on it in portable code because although it is allowed as an extension in some popular compilers (e.g., Gnu gcc) it is treated as an error in others (e.g., Visual C++).</p>
<p>But the case being discussed in GotW #42 is dynamically allocating an array using the array form of new (e.g., new T[n] where n is zero), which is governed by 5.3.4 [expr.new]. Here, zero length is okay for the reasons given in GotW #42:</p>
<blockquote><p>The result of &quot;new T[0]&quot; is just a pointer to an array with zero elements, and that pointer behaves just like any other result of &quot;new T[n]&quot; including the fact that you may not attempt to access more than n elements of the array&#8230; in this case, you may not attempt to access any elements at all, because there aren&#8217;t any. </p>
<p>&quot;Well, if you can&#8217;t do anything with zero-length arrays (other than remember their address),&quot; you may wonder, &quot;why should they be allowed?&quot; One important reason is that it makes it easier to write code that does dynamic array allocation. For example, the function f above would be needlessly more complex if it was forced to check the value of its n parameter before performing the &quot;new T[n]&quot; call.</p>
</blockquote>
<p>To make GotW #42 completely unambiguous, it could more specifically say that zero-length <em>heap-allocated</em> arrays are okay, which was the case being discussed in the article. But it always helps to read more than the subhead text.</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/290/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=290&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/09/02/when-is-a-zero-length-array-okay/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Design for Manycore Systems</title>
		<link>http://herbsutter.wordpress.com/2009/08/11/effective-concurrency-design-for-manycore-systems/</link>
		<comments>http://herbsutter.wordpress.com/2009/08/11/effective-concurrency-design-for-manycore-systems/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 17:50:19 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Opinion & Editorial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/08/11/effective-concurrency-design-for-manycore-systems/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, Design for Manycore Systems, is now live on DDJ’s website.
From the article:
Why worry about “manycore” today?
Dual- and quad-core computers are obviously here to stay for mainstream desktops and notebooks. But do we really need to think about &#34;many-core&#34; systems if we&#8217;re building a typical mainstream application right now? I find [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=289&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=219200099">Design for Manycore Systems</a>, is now live on DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p><em>Why worry about “manycore” today?</em></p>
<p>Dual- and quad-core computers are obviously here to stay for mainstream desktops and notebooks. But do we really need to think about &quot;many-core&quot; systems if we&#8217;re building a typical mainstream application right now? I find that, to many developers, &quot;many-core&quot; systems still feel fairly remote, and not an immediate issue to think about as they&#8217;re working on their current product.</p>
<p>This column is about why it&#8217;s time right now for most of us to think about systems with lots of cores. In short: Software is the (only) gating factor; as that gate falls, hardware parallelism is coming more and sooner than many people yet believe. …</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">Use Thread Pools Correctly: Keep Tasks Short and Nonblocking</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">Eliminate False Sharing</a> (May 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">Break Up and Interleave Work to Keep Threads Responsive</a> (Jun 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=218401447">The Power of “In Progress”</a> (Jul 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=219200099">Design for Manycore Systems</a> (Aug 2009)</p>
</blockquote>
Posted in Concurrency, Hardware, Opinion &amp; Editorial, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/289/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=289&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/08/11/effective-concurrency-design-for-manycore-systems/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Suggestions on improving C++ skills</title>
		<link>http://herbsutter.wordpress.com/2009/08/10/suggestions-on-improving-c-skills/</link>
		<comments>http://herbsutter.wordpress.com/2009/08/10/suggestions-on-improving-c-skills/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 20:30:18 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/08/10/suggestions-on-improving-c-skills/</guid>
		<description><![CDATA[Someone just asked me about getting more proficient in C++, and with their permission I thought I’d share the question and my answer in case it’s of broader interest to folks wanting to improve their C++ skills.
Here’s the question:
I need to take my C++ knowledge up a notch &#8211; or two. On a scale of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=287&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Someone just asked me about getting more proficient in C++, and with their permission I thought I’d share the question and my answer in case it’s of broader interest to folks wanting to improve their C++ skills.</p>
<p>Here’s the question:</p>
<blockquote><p>I need to take my C++ knowledge up a notch &#8211; or two. On a scale of 1-10 I&#8217;d consider my C++ knowledge a 5 and would like to get to 7-8 in the next 4, or so, months. As C++ is a large language my quandary is what subject areas, using what study materials, should I focus on to get myself to this next level.</p>
<p>Questions (assuming that I&#8217;m going to study approx 2 hrs/day for 4 months):</p>
<p>1. How would you suggest I structure such a course of study (subject areas, 5 of time for each) ?     <br />1.1 If you were in my shoes, how would you proceed?      <br />2. If I was going to study and hopefully know cold one of your books, which do you think I should select?</p>
</blockquote>
<p>Here’s my response, which I didn’t limit to my own books. These are the first two “next books” books I would recommend to anyone who already knew the basics of the language and wanted to improve their proficiency with using C++ in production code:</p>
<blockquote><p>If you’re not already familiar with Scott Meyers’ <em><a href="http://www.amazon.com/exec/obidos/ASIN/0321334876/gotwca-20">Effective C++</a></em>, the current third edition is the plate to start (it’s substantially reworked since the first and second editions).</p>
<p>After that, I’d say the most important is <em><a href="http://www.amazon.com/exec/obidos/ASIN/0321113586/gotwca-20">C++ Coding Standards</a></em> which I wrote with Andrei Alexandrescu. Not only does it cover the top 100 things we felt were important to say about using C++ in production code, and had its guidance peer-reviewed in advance by a who’s-who of the C++ community more than any other C++ book I’ve ever heard of, but it also includes references in each Item for where to find more in-depth treatment. Most Items are just one or two pages, so if you know that Item already you can use it as a refresher; and if you discover ones that you’re less familiar with or rusty on the details, it tells you where to go to find out more.</p>
<p>I’d say those are the two most important that I can suggest. Best wishes with your studies!</p>
</blockquote>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/287/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=287&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/08/10/suggestions-on-improving-c-skills/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Trip Report: Exit Concepts, Final ISO C++ Draft in ~18 Months</title>
		<link>http://herbsutter.wordpress.com/2009/07/21/trip-report/</link>
		<comments>http://herbsutter.wordpress.com/2009/07/21/trip-report/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 21:43:49 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/?p=261</guid>
		<description><![CDATA[A week ago, I attended the summer ISO C++ meeting in Frankfurt, Germany. The C++ committee made a lot of progress on addressing national body comments on the full committee draft published last year, and is well on the way to publishing a second and final CD this winter with a final draft international standard [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=261&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A week ago, I attended the summer <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2711.pdf">ISO C++ meeting in Frankfurt, Germany</a>. The C++ committee made a lot of progress on addressing national body comments on the full committee draft published last year, and is well on the way to publishing a second and final CD this winter with a final draft international standard a year after that. To meet that schedule, the committee decided to defer a major feature, “concepts”, and not include it in this standard.</p>
<p>I’m surprised at some of the commentary I’ve been reading on the web about the deferral of concepts, including not just technical inaccuracies but also that their absence in C++0x is somehow a big deal for C++ as a language or is a major geopolitical firestorm. It may feel like a big deal because of the work that&#8217;s gone into concepts and the large number of pages of standardese that were needed to specify the feature, and there was a lot of discussion about important design details including heavy traffic on the committee reflectors this spring and early summer that probably made them look more controversial than they are.</p>
<p>But my opinion is that concepts’ presence or absence in C++0x just won’t make much difference to most users. Let me give some reasons why I feel that’s so, and maybe debunk some common misconceptions along the way, in the form of an unofficial FAQ. Note that I was never involved in the design of concepts and don’t speak for the designers, whose views might differ here and there; the following are observations from my point of view as a participant in the standards body (including in Frankfurt last week), and chair of the ISO C++ committee during the entire time concepts were being developed up to the meeting they were voted into the ISO C++0x working draft last fall.</p>
<p><strong>Q: <a href="http://www.research.att.com/~bs/">Bjarne Stroustrup</a> is the creator of C++ and a primary designer of concepts. What’s his take?</strong></p>
<p>A: Great question. <a href="http://www.ddj.com/architect/218600111"><strong>See Bjarne’s coverage here</strong></a>, published earlier today in Dr. Dobb’s.</p>
<p><strong>Q: Were concepts removed because of political reason X, Y, or Z?</strong></p>
<p>A: No. Concepts were removed because of normal project management considerations. The basic constraint has been phrased in many ways, all of them hitting at the same underlying tension among time, scope, cost, and quality. Here are two examples: “You can pick what goes on the train, or you can pick when the train leaves the station, but you can’t pick both.” “You can have good, fast, and cheap – pick any two.”</p>
<p>Fundamentally, the committee members felt that concepts are desirable but many (though not all) believed that they were still in design mode and needed more “bake time” – a formal poll of committee members in Frankfurt put the expected time at between three and four years – to get up to the quality of a feature that belongs in an international standard. Therefore, the two major options, and the ones that people generally argued for, were to either:</p>
<ul>
<li><em>Prioritize (bigger) scope.</em><strong> </strong>Wait for concepts, and accept a delay to the rest of the standard including features that are already finalized and ready to ship. </li>
<li><em>Prioritize (faster) schedule.</em> Finish and ship the standard to get already-done features into users’ hands, and decouple concepts to continue work on them for a future standard. </li>
</ul>
<p>The committee decided to prioritize schedule and ship C++0x sooner while still leaving the door wide open to also adopt concepts later.</p>
<p><strong>Q: Isn’t removing concepts a lot of work? Concepts are used pervasively in the C++0x CD published last fall.</strong></p>
<p>A: Yes, but it’s less work than you’d think. We won’t have a de-conceptized working draft for the post-meeting mailing, two weeks after the meeting, but should have one soon after that. (I would be remiss not to add: Thanks to our always-hardworking project editor, Pete Becker!)</p>
<p>Recall that, until last September, we had a complete draft of C++0x features specified entirely without the use of concepts. And many of the uses of concepts in the draft standard library were just replacements of preexisting non-concepts wording or implicit requirements (e.g., DefaultConstructible, MemberContainer), and will just revert to their previous wording or disappear back into implicitness.</p>
<p>The main C++0x feature that was always specified in terms of concepts was the new range-based for loop (e.g., <em>for( x : collection )</em> ). I’ve seen some wonder what we’ll do about that, but it’s already done; the non-concepts text for that feature was already voted in at the same Frankfurt meeting.</p>
<p><strong>Q: Wasn’t this C++0x’s one big feature?</strong></p>
<p>A: No. Concepts would be great, but for most users, the presence or absence of concepts will make no difference to their experience with C++0x except for quality of error messages (see below).</p>
<p>C++0x is still a major revision with many new major features, including improvements to templates (e.g., variadic templates, template aliases). C++’s other major new features include lambda functions (which unfortunately for Java were rejected for Java 7), move semantics (aka rvalue references), a concurrency memory model, threading and atomics libraries, initializer lists, and more. Other handy new features include delegating constructors, inherited constructors, defaulted and deleted functions, explicit virtual overriding control, alignment support, static assertions, and more. Not to mention convenience features like range-based for loops and “auto” type inference that are small but will certainly get a lot of use (as they do in C# and Java).</p>
<p>A number of those features are available now or soon in real compilers, including Gnu gcc, Visual C++ 2010, and Intel C++.</p>
<p><strong>Q: Aren’t concepts about adding major new expressive power to the language, and so enable major new kinds of programs or programming styles?</strong></p>
<p>A: Not really. Concepts are almost entirely about getting better error messages.</p>
<p>Yes, concepts would add one truly new expressive capability to the language, namely the ability to overload on concepts. That’s inconvenient to simulate without language support. Concept-based overloading would have been used in a handful of places in the standard library. But that’s it.</p>
<p>By far the most visible benefit of concepts lies in clearer template error messages, including the ability to do separate checking – confirming that a template’s implementation type-checks correctly with all possible valid types without having to instantiate it, and confirming that a given type can be used to instantiate a template without knowing the template’s implementation.</p>
<p><strong>Q: Weren’t concepts all about bringing templates into the 21st century? Where does this leave templates?</strong></p>
<p>A: Templates are still king of the genericity hill, for all their faults in the area of opaque compiler messages.</p>
<p>It’s important to remember that, in 1994, C++ was the only major language whose type genericity capabilities were strong enough to create the <a href="http://en.wikipedia.org/wiki/Standard_Template_Library">Standard Template Library (STL)</a>. Today, 15 years later, that is still true; you can’t express the STL’s containers-algorithms design separation well, or at all, using generics facilities in Ada, Java, .NET, or any other significant commercial or research language that I know of; as we learned when doing <a href="http://msdn.microsoft.com/en-us/library/ms379600(VS.80).aspx">STL.NET</a>, you can do the containers well with other generics, but not the orthogonalization with algorithms that is the heart of STL design style. Concepts or not, that hasn’t changed.</p>
<p>So my personal view is that templates have been in the 21st century since about 1994. No other language has yet caught up to their expressive power. And C++0x is adding some further power to templates, in particular by adding variadic templates and template aliases, both of which will help to simplify template code.</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=261&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/07/21/trip-report/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: The Power of &#8220;In Progress&#8221;</title>
		<link>http://herbsutter.wordpress.com/2009/07/15/effective-concurrency/</link>
		<comments>http://herbsutter.wordpress.com/2009/07/15/effective-concurrency/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 23:08:59 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/07/15/effective-concurrency/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, The Power of “In Progress”, is now live on DDJ’s website.
From the article:
Don&#8217;t let a long-running operation take hostages. When some work that takes a long time to complete holds exclusive access to one or more popular shared resources, such as a thread or a mutex that controls access to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=259&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=218401447">The Power of “In Progress”</a>, is now live on DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p>Don&#8217;t let a long-running operation take hostages. When some work that takes a long time to complete holds exclusive access to one or more popular shared resources, such as a thread or a mutex that controls access to some popular shared data, it can block other work that needs the same resource. Forcing that other work to wait its turn hurts both throughput and responsiveness.</p>
<p>…</p>
<p>Let&#8217;s look at the question from another angle, suggested by my colleague Terry Crowley: Instead of viewing partially-updated state with in-progress work as an &#8216;unfortunate&#8217; special case to remember and recover from, what if we simply embrace it as the normal case? …</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">Use Thread Pools Correctly: Keep Tasks Short and Nonblocking</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">Eliminate False Sharing</a> (May 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">Break Up and Interleave Work to Keep Threads Responsive</a> (Jun 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=218401447">The Power of “In Progress”</a> (Jul 2009)</p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=259&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/07/15/effective-concurrency/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Answering email about error handling in concurrent code</title>
		<link>http://herbsutter.wordpress.com/2009/06/23/answering-email-about-error-handling-in-concurrent-code/</link>
		<comments>http://herbsutter.wordpress.com/2009/06/23/answering-email-about-error-handling-in-concurrent-code/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 00:27:47 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/06/23/answering-email-about-error-handling-in-concurrent-code/</guid>
		<description><![CDATA[Someone emailed me today asking:
I&#8217;m writing because I&#8217;m somewhat conscious of what I would consider a rather large hole in the parallel programming literature.
… What if one or more of your tasks throws an exception? Should the thread that runs the task swallow it? Should the caught exceptions get stashed somewhere so that the &#34;parent&#34; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=258&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Someone emailed me today asking:</p>
<blockquote><p>I&#8217;m writing because I&#8217;m somewhat conscious of what I would consider a rather large hole in the parallel programming literature.</p>
<p>… What if one or more of your tasks throws an exception? Should the thread that runs the task swallow it? Should the caught exceptions get stashed somewhere so that the &quot;parent&quot; thread can deal with them once the tasks are complete? (This is somewhat tricky currently in a language such as C++(98) where one cannot store an exception caught with the &quot;catch(&#8230;)&quot; construct). Perhaps all tasks should have a no-throw guarantee? Perhaps some kind of asynchronous error handlers might be installed, somewhat like POSIX signals? The options are many, but choosing a strategy is hard for those of us with little parallel programming experience.</p>
</blockquote>
<p>I thought I’d share my response here:</p>
<p>That&#8217;s an excellent question. Someone asked that very question in Stockholm last month at my Effective Concurrency course, and my answer started out somewhat dismissive: &quot;Well, it&#8217;s about the same as you do in sequential code, and all the same guarantees apply; nothrow/nofail is only for a few key functions used for commit/rollback operations, and you’d usually target the basic guarantee unless adding the strong guarantee comes along naturally for near-free. So it’s pretty much the same as always. Although, well, of course futures may transport exceptions across threads, but that&#8217;s still the same because they manifest on .get(). And of course for parallel loops you may get multiple concurrent exceptions from multiple concurrent loop bodies that get aggregated into a single exception; and then there&#8217;s the question of whether you start new loop bodies that haven’t started yet (usually no) but do you interrupt loop bodies that are in progress (probably not), and&#8230; oh, hmm, yeah, I guess it would be good to write an article about that.&quot;</p>
<p>So the above is now adding to my notes of things to write about. :-) Maybe some of that stream-of-consciousness may be helpful until I can get to writing it up in more detail.</p>
<p>I pointed him to Doug Lea&#8217;s <a href="http://www.amazon.com/Concurrent-Programming-Java-TM-Principles/dp/0201310090">Concurrent Programming in Java</a> pages 161-176, &quot;Dealing with Failure&quot;, adding that I haven&#8217;t read it in detail but the subtopics look right. Also Joe Duffy’s <a href="http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X">Concurrent Programming on Windows</a>, pages 721-733.</p>
<p>If you know of a good standalone treatise focused on error handling in concurrent code, please mention it in the comments.</p>
Posted in C++, Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=258&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/06/23/answering-email-about-error-handling-in-concurrent-code/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Break Up and Interleave Work to Keep Threads Responsive</title>
		<link>http://herbsutter.wordpress.com/2009/06/16/effective-concurrency-break-up-and-interleave-work-to-keep-threads-responsive/</link>
		<comments>http://herbsutter.wordpress.com/2009/06/16/effective-concurrency-break-up-and-interleave-work-to-keep-threads-responsive/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 18:09:16 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/06/16/effective-concurrency-break-up-and-interleave-work-to-keep-threads-responsive/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, “Break Up and Interleave Work to Keep Threads Responsive”, is now live on DDJ’s website.
Sorry for the long title; suggestions welcome. I always try to word the title to make it (a) short, (b) active, and (c) advice, but sometimes I’ll settle for two of those, or just one, until [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=256&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">“Break Up and Interleave Work to Keep Threads Responsive”</a><strong></strong>, is now live on DDJ’s website.</p>
<p>Sorry for the long title; suggestions welcome. I always try to word the title to make it (a) short, (b) active, and (c) advice, but sometimes I’ll settle for two of those, or just one, until a better suggestion comes along.</p>
<p>From the article:</p>
<blockquote><p>What happens when this thread must remain responsive to new incoming messages that have to be handled quickly, even when we&#8217;re in the middle of servicing an earlier lower-priority message that may take a long time to process?</p>
<p>If all the messages must be handled on this same thread, then we have a problem. Fortunately, we also have two good solutions, both of which follow the same basic strategy: Somehow break apart the large piece of work to allow the thread to perform other work in between, interleaved between the chunks of the large item. Let&#8217;s consider the two major ways to implement that interleaving, and their respective tradeoffs in the areas of fairness and performance.</p>
</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">Use Thread Pools Correctly: Keep Tasks Short and Nonblocking</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">Eliminate False Sharing</a> (May 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299">Break Up and Interleave Work to Keep Threads Responsive</a> (Jun 2009)</p>
</blockquote>
Posted in Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/256/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=256&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/06/16/effective-concurrency-break-up-and-interleave-work-to-keep-threads-responsive/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Truth In Spam</title>
		<link>http://herbsutter.wordpress.com/2009/06/12/truth-in-spam/</link>
		<comments>http://herbsutter.wordpress.com/2009/06/12/truth-in-spam/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 23:59:48 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/06/12/truth-in-spam/</guid>
		<description><![CDATA[This afternoon I was just finishing up my next Effective Concurrency article (it’ll be up in a few days), when some spam email arrived. Just as my fingers’ auto-delete macro was about to fire, I noticed something odd about the name of the attachment and did a double-take:
 
Cool! There must be some kind of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=255&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This afternoon I was just finishing up my next Effective Concurrency article (it’ll be up in a few days), when some spam email arrived. Just as my fingers’ auto-delete macro was about to fire, I noticed something odd about the name of the attachment and did a double-take:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/06/image.png"><img title="image" style="border-right:0;border-top:0;display:inline;border-left:0;border-bottom:0;" height="178" alt="image" src="http://herbsutter.files.wordpress.com/2009/06/image_thumb.png?w=405&#038;h=178" width="405" border="0" /></a> </p>
<p>Cool! There must be some kind of new truth-in-advertising laws for spammers.</p>
<p>Yes, I know that as programmers we could argue about naming all day long. We could point out that maybe “virusLoader.gif” or “exploit_exploit_muhaha.gif” would be a little better, and argue about the relative merits of camel case and underscores. But there’s no need; I think “runnable.gif” is short, clear, and definitely good enough. (Evidently someone else thought so too, and just shipped it.)</p>
Posted in Friday Thoughts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/255/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=255&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/06/12/truth-in-spam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/06/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Dress Re-Hearsal?</title>
		<link>http://herbsutter.wordpress.com/2009/05/22/dress-re-hearsal/</link>
		<comments>http://herbsutter.wordpress.com/2009/05/22/dress-re-hearsal/#comments</comments>
		<pubDate>Fri, 22 May 2009 08:53:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/05/15/dress-re-hearsal/</guid>
		<description><![CDATA[An amusing hearse, seen on a neighborhood street:

Here’s a close-up of the license plate:
 
 
Made my morning.
Posted in Friday Thoughts       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=244&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>An amusing hearse, seen on a neighborhood street:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/04/img-0205.jpg"><img style="display:inline;border-width:0;" title="IMG_0205" src="http://herbsutter.files.wordpress.com/2009/04/img-0205-thumb.jpg?w=360&#038;h=480" border="0" alt="IMG_0205" width="360" height="480" /></a></p>
<p>Here’s a close-up of the license plate:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/04/temp.jpg"><img style="display:inline;border-width:0;" title="temp" src="http://herbsutter.files.wordpress.com/2009/04/temp-thumb.jpg?w=301&#038;h=237" border="0" alt="temp" width="301" height="237" /></a> </p>
<p> </p>
<p>Made my morning.</p>
Posted in Friday Thoughts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=244&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/05/22/dress-re-hearsal/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/img-0205-thumb.jpg" medium="image">
			<media:title type="html">IMG_0205</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/temp-thumb.jpg" medium="image">
			<media:title type="html">temp</media:title>
		</media:content>
	</item>
		<item>
		<title>VS2010 Beta 1 Now Available</title>
		<link>http://herbsutter.wordpress.com/2009/05/20/vs2010-beta-1-now-available/</link>
		<comments>http://herbsutter.wordpress.com/2009/05/20/vs2010-beta-1-now-available/#comments</comments>
		<pubDate>Thu, 21 May 2009 00:43:20 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C# / .NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/05/20/vs2010-beta-1-now-available/</guid>
		<description><![CDATA[For those of you who are interested in using or trying Microsoft development tools, I’m happy to report that Visual Studio 2010 Beta 1 is now available.
If you’re interested in:

concurrency and parallel computing, check out the new concurrency runtime (ConcRT) that implements efficient work stealing for scalable code, the Asynchronous Agents Library and the Parallel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=250&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>For those of you who are interested in using or trying Microsoft development tools, I’m happy to report that <a href="http://msdn.microsoft.com/en-us/netframework/dd582936.aspx">Visual Studio 2010 Beta 1</a> is now available.</p>
<p>If you’re interested in:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/dd504870(VS.100).aspx"><strong>concurrency and parallel computing</strong></a>, check out the new concurrency runtime (ConcRT) that implements efficient work stealing for scalable code, the <a href="http://msdn.microsoft.com/en-us/library/dd492627(VS.100).aspx">Asynchronous Agents Library</a> and the <a href="http://msdn.microsoft.com/en-us/library/dd492418(VS.100).aspx">Parallel Patterns Library (PPL)</a> for C++, and the <a href="http://msdn.microsoft.com/en-us/library/dd460717(VS.100).aspx">Task Parallel Library (TPL)</a> and <a href="http://msdn.microsoft.com/en-us/library/dd460688(VS.100).aspx">Parallel LINQ (PLINQ)</a> for .NET. And some nifty concurrency debugging and profiling tools, too. </li>
<li><strong><a href="http://msdn.microsoft.com/en-us/library/dd465215(VS.100).aspx">C++0x features</a></strong>, check out the <a href="http://msdn.microsoft.com/en-us/library/dd293608(VS.100).aspx">lambda functions</a> (my fave), move-semantic <a href="http://msdn.microsoft.com/en-us/library/dd293668(VS.100).aspx">rvalue references</a>, the new <a href="http://msdn.microsoft.com/en-us/library/6k3ybftz(VS.100).aspx">auto</a>, its good friend <a href="http://msdn.microsoft.com/en-us/library/dd537655(VS.100).aspx">decltype</a>, and the ever-helpful <a href="http://msdn.microsoft.com/en-us/library/dd293588(VS.100).aspx">static_assert</a>. </li>
<li><strong>functional programming in VS</strong>, enjoy the <a href="http://msdn.microsoft.com/en-us/library/dd553242(VS.100).aspx">F# programming language</a>. </li>
</ul>
<p>Remember this is just a beta and not intended for production use, but there’s a lot of cool stuff to play around with and it should run fine side-by-side with VS2008. Feedback via <a href="http://social.msdn.microsoft.com/Forums/en-US/category/VSPreRelease,netdevelopmentprerelease,visualstudioprerelease,vstsprerelease">forums</a> or <a href="http://go.microsoft.com/fwlink/?LinkID=151484">filing a bug/suggestion</a> is always appreciated. Enjoy!</p>
Posted in C# / .NET, C++, Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/250/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=250&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/05/20/vs2010-beta-1-now-available/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Eliminate False Sharing</title>
		<link>http://herbsutter.wordpress.com/2009/05/15/effective-concurrency-eliminate-false-sharing/</link>
		<comments>http://herbsutter.wordpress.com/2009/05/15/effective-concurrency-eliminate-false-sharing/#comments</comments>
		<pubDate>Fri, 15 May 2009 18:51:38 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C# / .NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/05/15/effective-concurrency-eliminate-false-sharing/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, “Eliminate False Sharing”, is now live on DDJ’s website.
People keep writing asking me about my previous mentions of false sharing, even debating whether it’s really a problem. So this month I decided to treat it in depth, including:

A compelling and realistic example where just changing a couple of lines to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=248&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">“Eliminate False Sharing”</a><strong></strong>, is now live on DDJ’s website.</p>
<p>People keep writing asking me about my previous mentions of false sharing, even debating whether it’s really a problem. So this month I decided to treat it in depth, including:</p>
<ul>
<li>A compelling and realistic example where just changing a couple of lines to remove false sharing takes an algorithm from zero scaling to perfect scaling – even when many threads are merely doing reads. Hopefully after this nobody will argue that false sharing isn’t a problem. :-)</li>
<li>How your performance monitoring and analysis tools do and/or don’t help you uncover the problem, and how to use them effectively to identify the culprit. Short answer: CPU activity monitors aren’t very helpful, but cycles-per-instruction (CPI) and cache miss rate measurements attributed to specific lines of source code are your friend.</li>
<li>The two ways to correct the code: Reduce the frequency of writes to the too-popular cache line, or add padding to move other data off the line.</li>
<li>Reusable code in C++ and C#, and a note about Java, that you can use to use padding (and alignment if available) to put frequently-updated objects on their own cache lines.</li>
</ul>
<p>From the article:</p>
<blockquote><p>In two previous articles I pointed out the performance issue of false sharing (aka cache line ping-ponging), where threads use different objects but those objects happen to be close enough in memory that they fall on the same cache line, and the cache system treats them as a single lump that is effectively protected by a hardware write lock that only one core can hold at a time. … It’s easy to see why the problem arises when multiple cores are writing to different parts of the same cache line… In practice, however, it can be even more common to encounter a reader thread using what it thinks is read-only data still getting throttled by a writer thread updating a different but nearby memory location…</p>
<p>A number of readers have asked for more information and examples on where false sharing arises and how to deal with it. … This month, let’s consider a concrete example that shows an algorithm <em>in extremis </em>due to false sharing distress, how to use tools to analyze the problem, and the two coding techniques we can use to eliminate false sharing trouble. …</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">“Use Thread Pools Correctly: Keep Tasks Short and Nonblocking”</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217500206">“Eliminate False Sharing”</a> (May 2009)</p>
</blockquote>
Posted in C# / .NET, C++, Concurrency, Hardware, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=248&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/05/15/effective-concurrency-eliminate-false-sharing/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>You Know When Your UI Needs Help When&#8230;</title>
		<link>http://herbsutter.wordpress.com/2009/05/01/you-know-when-your-ui-needs-help-when/</link>
		<comments>http://herbsutter.wordpress.com/2009/05/01/you-know-when-your-ui-needs-help-when/#comments</comments>
		<pubDate>Fri, 01 May 2009 08:39:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/05/01/you-know-when-your-ui-needs-help-when/</guid>
		<description><![CDATA[Seen at a gas station:
 


You know your UI has usability issues when people tape multiple signs on your gas pump to help people get through the intricate and error-prone process of purchasing fuel.
Why does the upper note exist? The trouble is that there’s a Debit button but not a Credit button, and so since [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=238&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Seen at a gas station:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/04/img-0220.jpg"><img title="IMG_0220" style="display:inline;border-width:0;" height="480" alt="IMG_0220" src="http://herbsutter.files.wordpress.com/2009/04/img-0220-thumb.jpg?w=360&#038;h=480" width="360" border="0" /></a> </p>
</p>
</p>
<p>You know your UI has usability issues when people tape multiple signs on your gas pump to help people get through the intricate and error-prone process of purchasing fuel.</p>
<p>Why does the upper note exist? The trouble is that there’s a Debit button but not a Credit button, and so since Credit is the default, users need to remember to override the default before swiping the card. People will sometimes naturally forget the special step because there was originally no reminder that this needed to be done, and because most other pumps don’t work that way. One solution would be to print the information prominently near the card reader, thus standardizing the note and making it more visible. A better and simpler solution would be to do what most pumps do: Avoid the opportunity for forgetting to specify the right thing by having both buttons, Debit and Credit, and simply prompting the user to press one or the other after they swipe their card.</p>
<p>But the trouble behind the lower note is even more blatant and, frankly, inexcusable: Is there any good reason not to conditionally print “ENTER PIN” or “ENTER ZIP,” instead of just always printing “ENTER DATA” which is not only unclear but also one of the classic geeky words to avoid in a consumer-oriented UI?</p>
<p>Then again, I’m amazed that in this day and age I still see output like “1 item(s) purchased.” Apparently it’s still more important to write the programmer-friendly <em>printf( “%d item(s)”, count )</em> than the user-friendly <em>printf( “%d item%s”, count, (count==1 ? “” : “s”) )</em>.</p>
Posted in Friday Thoughts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=238&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/05/01/you-know-when-your-ui-needs-help-when/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/img-0220-thumb.jpg" medium="image">
			<media:title type="html">IMG_0220</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Use Thread Pools Correctly &#8211; Keep Tasks Short and Nonblocking</title>
		<link>http://herbsutter.wordpress.com/2009/04/20/effective-concurrency-use-thread-pools-correctly-keep-tasks-short-and-nonblocking/</link>
		<comments>http://herbsutter.wordpress.com/2009/04/20/effective-concurrency-use-thread-pools-correctly-keep-tasks-short-and-nonblocking/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 00:39:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/04/20/effective-concurrency-use-thread-pools-correctly-keep-tasks-short-and-nonblocking/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, “Use Thread Pools Correctly: Keep Tasks Short and Nonblocking”, is now live on DDJ’s website.
From the article:
… But the thread pool is a leaky abstraction. That is, the pool hides a lot of details from us, but to use it effectively we do need to be aware of some things [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=245&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">“Use Thread Pools Correctly: Keep Tasks Short and Nonblocking”</a><strong></strong>, is now live on DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p>… But the thread pool is a leaky abstraction. That is, the pool hides a lot of details from us, but to use it effectively we do need to be aware of some things a pool does under the covers so that we can avoid inadvertently hitting performance and correctness pitfalls. Here&#8217;s the summary up front: </p>
<p>1. Tasks should be small, but not too small, otherwise performance overheads will dominate. </p>
<p>2. Tasks should avoid blocking (waiting idly for other events, including inbound messages or contested locks), otherwise the pool won&#8217;t consistently utilize the hardware well &#8212; and, in the extreme worst case, the pool could even deadlock. </p>
<p>Let&#8217;s see why. …</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409">“Use Thread Pools Correctly: Keep Tasks Short and Nonblocking”</a> (Apr 2009)</p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=245&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/04/20/effective-concurrency-use-thread-pools-correctly-keep-tasks-short-and-nonblocking/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>A Wryly Repurposed Quotation</title>
		<link>http://herbsutter.wordpress.com/2009/04/17/a-wryly-repurposed-quotation/</link>
		<comments>http://herbsutter.wordpress.com/2009/04/17/a-wryly-repurposed-quotation/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 16:31:26 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/04/17/a-wryly-repurposed-quotation/</guid>
		<description><![CDATA[In my travels, I recently came across this empty store with an almost-empty box beside the front door. As seen in Monterey, CA:

Evidently some character had also noticed the empty store with its empty box, and decided to do a little walk-by wry economic commentary via repurposed quotation. Zooming on the once-empty box:
&#160;
Posted in Friday [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=235&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In my travels, I recently came across this empty store with an almost-empty box beside the front door. As seen in Monterey, CA:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/04/img-0222.jpg"><img title="IMG_0222" style="display:inline;border-width:0;" height="180" alt="IMG_0222" src="http://herbsutter.files.wordpress.com/2009/04/img-0222-thumb.jpg?w=240&#038;h=180" width="240" border="0" /></a></p>
<p>Evidently some character had also noticed the empty store with its empty box, and decided to do a little walk-by wry economic commentary via repurposed quotation. Zooming on the once-empty box:</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/04/img-0223.jpg"><img title="IMG_0223" style="display:inline;border-width:0;" height="240" alt="IMG_0223" src="http://herbsutter.files.wordpress.com/2009/04/img-0223-thumb.jpg?w=180&#038;h=240" width="180" border="0" /></a>&#160;<a href="http://herbsutter.files.wordpress.com/2009/04/img-0224.jpg"><img title="IMG_0224" style="display:inline;border-width:0;" height="240" alt="IMG_0224" src="http://herbsutter.files.wordpress.com/2009/04/img-0224-thumb.jpg?w=180&#038;h=240" width="180" border="0" /></a></p>
Posted in Friday Thoughts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/235/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=235&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/04/17/a-wryly-repurposed-quotation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/img-0222-thumb.jpg" medium="image">
			<media:title type="html">IMG_0222</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/img-0223-thumb.jpg" medium="image">
			<media:title type="html">IMG_0223</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/04/img-0224-thumb.jpg" medium="image">
			<media:title type="html">IMG_0224</media:title>
		</media:content>
	</item>
		<item>
		<title>New Dates for Effective Concurrency Seminar in Europe: May 27-29, Stockholm, Sweden</title>
		<link>http://herbsutter.wordpress.com/2009/03/30/new-dates-for-effective-concurrency-seminar-in-europe-may-27-29-stockholm-sweden/</link>
		<comments>http://herbsutter.wordpress.com/2009/03/30/new-dates-for-effective-concurrency-seminar-in-europe-may-27-29-stockholm-sweden/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 20:34:36 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/03/30/new-dates-for-effective-concurrency-seminar-in-europe-may-27-29-stockholm-sweden/</guid>
		<description><![CDATA[Now that I’m over the icky flu that forced me to postpone the seminar two weeks ago, I’m happy to say that we have new dates: Effective Concurrency (Europe) will be held on May 27-29, 2009, in Stockholm, Sweden. I&#8217;ll cover the following topics:

Fundamentals: Define basic concurrency goals and requirements • Understand applications’ scalability needs [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=228&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Now that I’m over <a href="http://herbsutter.wordpress.com/2009/03/14/postponed-effective-concurrency-europe/">the icky flu</a> that forced me to postpone the seminar two weeks ago, I’m happy to say that we have new dates: <a href="http://webshop.pc-ware.se/Data/FileLibrary/se/effective_concurrency.pdf"><strong>Effective Concurrency (Europe)</strong></a> will be held on May 27-29, 2009, in Stockholm, Sweden. I&#8217;ll cover the following topics:</p>
<ul>
<li><strong>Fundamentals: </strong>Define basic concurrency goals and requirements • Understand applications’ scalability needs • Key concurrency patterns </li>
<li><strong>Isolation &#8212; Keep work separate: </strong>Running tasks in isolation and communicate via async messages • Integrating multiple messaging systems, including GUIs and sockets • Building responsive applications using background workers • Threads vs. thread pools </li>
<li><strong>Scalability &#8212; Re-enable the Free Lunch:</strong> When and how to use more cores • Exploiting parallelism in algorithms • Exploiting parallelism in data structures • Breaking the scalability barrier </li>
<li><strong>Consistency &#8212; Don’t Corrupt Shared State:</strong> The many pitfalls of locks&#8211;deadlock, convoys, etc. • Locking best practices • Reducing the need for locking shared data • Safe lock-free coding patterns • Avoiding the pitfalls of general lock-free coding • Races and race-related effects </li>
<li><strong>High Performance Concurrency:</strong> Machine architecture and concurrency • Costs of fundamental operations, including locks, context switches, and system calls • Memory and cache effects • Data structures that support and undermine concurrency • Enabling linear and superlinear scaling </li>
<li><strong>Migrating Existing Code Bases to Use Concurrency </strong></li>
<li><strong>Near-Future Tools and Features </strong></li>
</ul>
<p>I hope to see some of you there!</p>
Posted in Concurrency, Software Development, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=228&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/03/30/new-dates-for-effective-concurrency-seminar-in-europe-may-27-29-stockholm-sweden/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>RIP: SD Conferences</title>
		<link>http://herbsutter.wordpress.com/2009/03/24/rip-sd-conferences/</link>
		<comments>http://herbsutter.wordpress.com/2009/03/24/rip-sd-conferences/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 21:55:29 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/03/24/rip-sd-conferences/</guid>
		<description><![CDATA[The latest casualties in the technical education world are the Software Development conferences – SD West, SD Best Practices, and Architecture &#38; Design World – which are being discontinued effective immediately, making the SD West that was just held earlier this month the last of its kind. The conferences were run by the same company [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=226&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The latest casualties in the technical education world are the <a href="http://sdexpo.com/">Software Development conferences</a> – SD West, SD Best Practices, and Architecture &amp; Design World – which are being discontinued effective immediately, making the SD West that was just held earlier this month the last of its kind. The conferences were run by the same company that ran some important but now-defunct magazines including <em>C/C++ Users Journal</em> and of course <em>Software Development Magazine</em>, as well as <em>Dr. Dobb’s</em> which still exists but <a href="http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/">recently went web-only</a>.</p>
<p>SD, especially SD West, has been a mainstay of the programming conferences world since 1985. I’m going to miss these shows. They were a wonderful gathering place for talks and tutorials by A-list speakers covering many technologies, from C++ to Java to AJAX and more. More personally, Bjarne Stroustrup and I immensely enjoyed giving our two-day Stroustrup &amp; Sutter seminar there several times in recent years, and skipped this year’s event in anticipation of doing a fresh one again next spring. Alas, it’s not to be (at least not with SD).</p>
<p>SD, you will be missed.</p>
Posted in Software Development, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=226&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/03/24/rip-sd-conferences/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Use Threads Correctly = Isolation + Asynchronous Messages</title>
		<link>http://herbsutter.wordpress.com/2009/03/16/effective-concurrency-use-threads-correctly-isolation-asynchronous-messages/</link>
		<comments>http://herbsutter.wordpress.com/2009/03/16/effective-concurrency-use-threads-correctly-isolation-asynchronous-messages/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 03:06:46 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/03/16/effective-concurrency-use-threads-correctly-isolation-asynchronous-messages/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, “Use Threads Correctly = Isolation + Asynchronous Messages”, is now live on DDJ’s website.
From the article:
Explicit threads are undisciplined. They need some structure to keep them in line. In this column, we&#8217;re going to see what that structure is, as we motivate and illustrate best practices for using threads &#8212; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=223&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">“Use Threads Correctly = Isolation + Asynchronous Messages”</a><strong></strong>, is now live on DDJ’s website.</p>
<p>From the article:</p>
<blockquote><p>Explicit threads are undisciplined. They need some structure to keep them in line. In this column, we&#8217;re going to see what that structure is, as we motivate and illustrate best practices for using threads &#8212; techniques that will make our concurrent code easier to write correctly and to reason about with confidence.</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns and the DDJ print magazine issue in which they first appeared:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465">Use Threads Correctly = Isolation + Asynchronous Messages</a> (Apr 2009)</p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=223&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/03/16/effective-concurrency-use-threads-correctly-isolation-asynchronous-messages/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Postponed: Effective Concurrency Europe</title>
		<link>http://herbsutter.wordpress.com/2009/03/14/postponed-effective-concurrency-europe/</link>
		<comments>http://herbsutter.wordpress.com/2009/03/14/postponed-effective-concurrency-europe/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 02:20:30 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/03/14/postponed-effective-concurrency-europe/</guid>
		<description><![CDATA[Right now I should be at 40,000 feet somewhere over Baffin Island on my way to Stockholm for Effective Concurrency Europe, but instead I’m in bed with a fever that I’ve had since Wednesday night and still unable to talk. The organizer and I have been staying in touch with flu updates every few hours [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=221&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Right now I should be at 40,000 feet somewhere over Baffin Island on my way to Stockholm for <a href="http://herbsutter.wordpress.com/2009/01/29/effective-concurrency-seminar-in-europe-march-16-18-stockholm-sweden/">Effective Concurrency Europe</a>, but instead I’m in bed with a fever that I’ve had since Wednesday night and still unable to talk. The organizer and I have been staying in touch with flu updates every few hours to see if lots of “TLC and OTC” (tender loving care and over-the-counter drugs) could get me well enough to fly and push through teaching for three days; that usually works, but this time it’s a really nasty one, and we have to postpone.</p>
<p>I’m sorry to have to disappoint this week and for any inconvenience this will surely cause some of you, and I hope that you’ll understand. The organizer has already emailed everyone who has registered to notify you of the cancellation of this week’s dates (this post partly serves as a backup to that email), and we’ll keep you posted as we reschedule. The response has exceeded expectations by a good margin, and I’m grateful for your strong interest and planning to take time away from your schedules to come and talk concurrency with me. I’m still very much looking forward to seeing you there in the near future. (And minus potentially spreading wicked germs.)</p>
<p>Best wishes to you and yours,</p>
<p>Herb</p>
Posted in Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=221&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/03/14/postponed-effective-concurrency-europe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Free Training For Laid-Off Developers</title>
		<link>http://herbsutter.wordpress.com/2009/02/26/free-training-for-laid-off-developers/</link>
		<comments>http://herbsutter.wordpress.com/2009/02/26/free-training-for-laid-off-developers/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 21:37:59 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/02/26/free-training-for-laid-off-developers/</guid>
		<description><![CDATA[Like many areas in the United States, Seattle has recently been hit with layoffs and downsizing in our industry. So it’s quite timely that Steve McConnell’s company Construx, in the Seattle area, is offering free training for laid-off software workers:
After listening to doom and gloom economic reports for the past few months, we decided we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=216&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Like many areas in the United States, Seattle has recently been hit with layoffs and downsizing in our industry. So it’s quite timely that Steve McConnell’s company Construx, in the Seattle area, is <a href="http://forums.construx.com/blogs/stevemcc/archive/2009/02/24/construx-offers-free-training-for-laid-off-software-workers.aspx">offering free training for laid-off software workers</a>:</p>
<blockquote><p>After listening to doom and gloom economic reports for the past few months, we decided we would try to do something to brighten our little corner of the world. Here&#8217;s our official press release about it:</p>
<p><em><strong>Construx Software has designated 25% of its public seminar seats free of charge to software workers who have been laid off. Construx seminars help software professionals improve their technical and managerial skills. Seminar attendees will be more effective when they reenter the workforce. Construx hopes this program will help laid-off software workers reenter the workforce more quickly. </strong></em></p>
</blockquote>
<p>Please read the full article for more details.</p>
<p>I’m very pleased to report that this program will include <a href="http://construx.com/Page.aspx?nid=84&amp;id=108">my next U.S. <em>Effective Concurrency</em> seminar</a> which will be held in Bellevue, WA on July 27-30, 2009. I’ll blog about that seminar again as we get closer, but it’s on the Construx calendar now.</p>
<p>I hope that this will be helpful to some people, and I look forward to seeing some of you in Bellevue.</p>
<h3>Aside: Please Be Professional</h3>
<p>One problem with offering things for free is that people don’t always value them. I was surprised to learn that a surprising number of people who’ve asked for and received this free admission at Construx have been no-shows.</p>
<p>The following should go without saying, but here it is: As a courtesy to Construx and to other attendees, please don’t sign up unless you intend to come, and if something comes up that prevents you from attending please notify Construx. Otherwise, you may be taking the place of someone who would have liked to attend in your place (seating is limited), and Construx is out the cost of food (they provide breakfast and lunch) and printed color binders and such that go to waste.</p>
<h3>Other Free Materials</h3>
<p>Most of you know that <a href="http://www.gotw.ca/publications/index.htm">virtually all the articles and columns I’ve ever written</a> have always been available for free on my own website or via magazine websites (modulo some link rot, sigh). These include all the <a href="http://herbsutter.wordpress.com/2009/02/13/effective-concurrency-sharing-is-the-root-of-all-contention/">Effective Concurrency</a> articles, and my C++-focused “Guru of the Week” and magazine articles.</p>
<p>The only things I’ve written that aren’t legally freely available are the final texts of my books, including translations, to which the publishing company owns the copyright; but the books are based on the same freely-available English articles, and Addison-Wesley/Pearson has never had any issue with those staying available, so the basic material is all there.</p>
<p>But there’s news on the “final book contents” front, too, at least in English: Once my current book(s) on <em>Effective Concurrency</em> is done, Jim Hyslop and I plan to compile a book of the C++ Conversations articles we coauthored in <em>C++ Report</em> and <em>C/C++ Users Journal</em> (thanks again for your patience, Jim!) and I also plain to write a second edition of <em>Exceptional C++ – </em>and both books will be updated for <a href="http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/">C++0x, which is now feature-complete</a> and undergoing its first round of international review. It’s quite interesting just how often using C++0x language and library features (from <a href="http://herbsutter.wordpress.com/2008/03/29/trip-report-februarymarch-2008-iso-c-standards-meeting/">lambdas</a> to shared_ptrs and concurrency) really help solve the old problems in even more elegant and robust ways… and I’m sure we’ll throw in a couple of new problems and solutions too. My goal is to post these books’ draft Items, perhaps in the form of blog entries, as we write them. But I’m also working with the publisher to see if perhaps we could even post the very final Items in that format with their permission. I’ll post more news about that as there’s something to say.</p>
Posted in C++, Concurrency, Software Development, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=216&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/02/26/free-training-for-laid-off-developers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Sharing Is the Root of All Contention</title>
		<link>http://herbsutter.wordpress.com/2009/02/13/effective-concurrency-sharing-is-the-root-of-all-contention/</link>
		<comments>http://herbsutter.wordpress.com/2009/02/13/effective-concurrency-sharing-is-the-root-of-all-contention/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 16:46:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/02/13/effective-concurrency-sharing-is-the-root-of-all-contention/</guid>
		<description><![CDATA[This month’s Effective Concurrency column, “Sharing Is the Root of All Contention”, is now live on DDJ’s website.
This article aims to address the root cause behind some frequently made assertions: Statements like “locks kill scalability” and “CAS kills scalability” are mostly true but focus on symptoms rather than causes; and others such as “reader/writer mutexes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=215&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month’s <strong>Effective Concurrency</strong> column, <a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">“Sharing Is the Root of All Contention”</a><strong></strong>, is now live on DDJ’s website.</p>
<p>This article aims to address the root cause behind some frequently made assertions: Statements like “locks kill scalability” and “CAS kills scalability” are mostly true but focus on symptoms rather than causes; and others such as “reader/writer mutexes are great for scalability” at minimum need some heavy qualification.</p>
<p>From the article:</p>
<blockquote><p>Quick: What fundamental principle do all of the following have in common?</p>
<ul>
<li>Two children drawing with crayons. </li>
<li>Three customers at Starbucks adding cream to their coffee. </li>
<li>Four processes running on a CPU core. </li>
<li>Five threads updating an object protected by a mutex. </li>
<li>Six threads running on different processors updating the same lock-free queue. </li>
<li>Seven modules using the same reference-counted shared object. </li>
</ul>
<p>Answer: In each case, multiple users share a resource that requires coordination because not everyone can use it simultaneously &#8212; and <i>such sharing is the root cause of all resulting contention</i> that will degrade everyone&#8217;s performance. (Note: The only kind of shared resource that doesn&#8217;t create contention is one that inherently requires no synchronization because all users can use it simultaneously without restriction, which means it doesn&#8217;t fall into the description above. For example, an immutable object can have its unchanging bits be read by any number of threads or processors at any time without synchronization.)</p>
<p>In this article, I&#8217;ll deliberately focus most of the examples on one important case, namely mutable (writable) shared objects in memory, which are an inherent bottleneck to scalability on multicore systems. But please don&#8217;t lose sight of the key point, namely that &quot;sharing causes contention&quot; is a general principle that is not limited to shared memory or even to computing.</p>
<p><strong>The Inherent Costs of Sharing</strong></p>
<p>Here&#8217;s the issue in one sentence: Sharing fundamentally requires waiting and demands answers to expensive questions. …</p>
</blockquote>
<p>Aside: This will be in the first electronic-only Dr. Dobb’s Report, and I’m going to have to get used to Dobb’s being <a href="http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/">electronic-only</a>. One consequence of this change that I just discovered today is that an article can go online hours after I correct the proofs. That may seem like it shouldn’t be surprising in the days of blogs, but a magazine isn’t (or at least wasn’t) like a blog. When I wrote for magazines like <em>C++ Report</em> in the late 1990s, the time between submitting the final column manuscript and seeing it in print was about two to three months, depending on the magazine. Since the mid-2000s with Dobb’s, it’s been only one month from proofs to print &#8212; and Dobb’s could have posted the online versions even sooner, but held them back to be semi-synced with the print magazine. Now that the print constraint has disappeared, apparently I can (and, today, did) start work on a Friday morning to find the Dobb’s proofs I corrected the night before already on the web. Nifty. (And thanks again, Deirdre!)</p>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns and the DDJ print magazine issue in which they first appeared:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007) </p>
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007) </p>
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008) </p>
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008) </p>
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008) </p>
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008) </p>
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008) </p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008) </p>
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008) </p>
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
<p><a href="http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=214100002">Sharing Is the Root of All Contention</a> (Mar 2009)</p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=215&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/02/13/effective-concurrency-sharing-is-the-root-of-all-contention/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Income in Perspective: 2 Bppl @ $3/day</title>
		<link>http://herbsutter.wordpress.com/2009/02/06/income-in-perspective-2-bppl-3day/</link>
		<comments>http://herbsutter.wordpress.com/2009/02/06/income-in-perspective-2-bppl-3day/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 09:17:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>
		<category><![CDATA[Opinion & Editorial]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/02/06/income-in-perspective-2-bppl-3day/</guid>
		<description><![CDATA[I just saw a CNN headline that read: “Young workers scrimp to live on $15/wk.” Before reading further, what do you think: Is that stunning and shocking? Or shockingly typical?
The story turned out to be a piece about white-collar workers in China trying to live frugally, spending only 100 Yuan on travel and food during [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=211&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just saw a CNN headline that read: <a href="http://www.cnn.com/video/#/video/business/2009/02/04/chang.china.living.cheap.cnn">“Young workers scrimp to live on $15/wk.”</a> Before reading further, what do you think: Is that stunning and shocking? Or shockingly typical?</p>
<p>The story turned out to be a piece about white-collar workers in China trying to live frugally, spending only 100 Yuan on travel and food during the workweek to conserve funds. Of course, the workers’ actual total expenses and income are higher, because that $15/week figure doesn’t include weekend expenses and other major costs like rent. Even so, the story is considered newsworthy here, and is probably a shock to a number of readers in the western world.</p>
<p>But the headline wouldn’t surprise readers who are familiar with the approximate distribution of income/GDP/wealth in the world.</p>
<p>To illustrate, here are two personal data points from 2006, when my wife and I traveled to Kenya and Zambia to visit friends:</p>
<ul>
<li><strong>Income:</strong> In <a href="http://www.nationmaster.com/country/ke-kenya/eco-economy">Kenya</a>, we were told that being a staff worker at a safari lodge is considered a good job. What does it pay? About $2 per day, for long hours and six-day weeks. This isn’t unusual; in about 30 countries, including Kenya, more than half of the population <a href="http://www.nationmaster.com/graph/eco_pop_und_2_a_day-economy-population-under-2-day">earns under $2 per day</a>. <strong>An estimated two billion people – 30% of the world’s population – live on an income of less than $3 per day.</strong> And $3 per day is about what the attention-grabbing CNN headline implies, though the actual story behind that headline is much less bad.</li>
<li><strong>Cost of living:</strong> But what happens when we consider, not just dollar-for-dollar comparisons, but purchasing power? Isn’t it less expensive to live in less-developed countries? Yes, it usually is, especially for shelter and services – there’s been some talk lately on the U.S. news about retiring in Mexico as a way for older people to save money in this economy – but the difference for the same quality goods is often less than one might think. In Lusaka, the capital of <a href="http://www.nationmaster.com/country/za-zambia/eco-economy">Zambia</a>, we found there were only three grocery stores [*] having similar goods to what we would expect to find in a U.S.-style Safeway, although of course the Zambian stores were much smaller than U.S. stores (more the size of a medium Trader Joe’s) and offered far less selection diversity (something like a factor of 20 fewer varieties or brands). When we visited one of the stores, I picked up a few Western-style items, totaled the price and converted to U.S. dollars in my head, and found that those <strong>comparable products in Lusaka cost nearly the same as we would have paid for the same items in Seattle</strong>. Our local friend replied: “Right, nobody who lives here would ever think of buying a can of soda pop.” Certainly not when a can of <a href="http://www.pepsi.com/">Coke</a> costs a day’s wage for many people, and doesn’t confer any significant nutritional benefit. </li>
</ul>
<p>The gulf between the western- and world-median standards of living is, simply put, vast – and growing. The standard of living that’s normal for most of the planet’s population is well nigh unimaginable to many of us in the western world, and even for those of us who’ve been there, it’s one thing to see it and quite another to really understand what such a life would be like. I don’t claim to.</p>
<p>&#160;</p>
<p>[*] They might well be the only such stores in the country, not just the capital.</p>
Posted in Friday Thoughts, Opinion &amp; Editorial  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=211&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/02/06/income-in-perspective-2-bppl-3day/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency Seminar in Europe: March 16-18, Stockholm, Sweden</title>
		<link>http://herbsutter.wordpress.com/2009/01/29/effective-concurrency-seminar-in-europe-march-16-18-stockholm-sweden/</link>
		<comments>http://herbsutter.wordpress.com/2009/01/29/effective-concurrency-seminar-in-europe-march-16-18-stockholm-sweden/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 20:13:00 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/01/29/effective-concurrency-seminar-in-europe-march-16-18-stockholm-sweden/</guid>
		<description><![CDATA[A number of people have asked whether I will be teaching my Effective Concurrency seminar in Europe. The answer is yes:
Effective Concurrency (Europe) will be held on March 16-18, 2009, in Stockholm, Sweden. This is my only public European seminar in 2009. I&#8217;ll cover the following topics:

Fundamentals: Define basic concurrency goals and requirements • Understand [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=210&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A number of people have asked whether I will be teaching my Effective Concurrency seminar in Europe. The answer is yes:</p>
<p><a href="http://webshop.pc-ware.se/Data/FileLibrary/se/effective_concurrency.pdf"><strong>Effective Concurrency (Europe)</strong></a> will be held on March 16-18, 2009, in Stockholm, Sweden. This is my only public European seminar in 2009. I&#8217;ll cover the following topics:</p>
<ul>
<li><strong>Fundamentals: </strong>Define basic concurrency goals and requirements • Understand applications’ scalability needs • Key concurrency patterns </li>
<li><strong>Isolation &#8212; Keep work separate: </strong>Running tasks in isolation and communicate via async messages • Integrating multiple messaging systems, including GUIs and sockets • Building responsive applications using background workers • Threads vs. thread pools </li>
<li><strong>Scalability &#8212; Re-enable the Free Lunch:</strong> When and how to use more cores • Exploiting parallelism in algorithms • Exploiting parallelism in data structures • Breaking the scalability barrier </li>
<li><strong>Consistency &#8212; Don’t Corrupt Shared State:</strong> The many pitfalls of locks&#8211;deadlock, convoys, etc. • Locking best practices • Reducing the need for locking shared data • Safe lock-free coding patterns • Avoiding the pitfalls of general lock-free coding • Races and race-related effects </li>
<li><strong>High Performance Concurrency:</strong> Machine architecture and concurrency • Costs of fundamental operations, including locks, context switches, and system calls • Memory and cache effects • Data structures that support and undermine concurrency • Enabling linear and superlinear scaling </li>
<li><strong>Migrating Existing Code Bases to Use Concurrency </strong></li>
<li><strong>Near-Future Tools and Features </strong></li>
</ul>
<p>I hope to see some of you there!</p>
Posted in Concurrency, Software Development, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=210&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/01/29/effective-concurrency-seminar-in-europe-march-16-18-stockholm-sweden/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>From the &quot;we know what they meant, but it&#8217;s not what they said&quot; department</title>
		<link>http://herbsutter.wordpress.com/2009/01/16/from-the-we-know-what-they-meant-but-its-not-what-they-said-department/</link>
		<comments>http://herbsutter.wordpress.com/2009/01/16/from-the-we-know-what-they-meant-but-its-not-what-they-said-department/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 18:57:06 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/01/16/from-the-we-know-what-they-meant-but-its-not-what-they-said-department/</guid>
		<description><![CDATA[While walking our dogs recently, we came across several of these signs &#8212; ironically, in front of our neighborhood school.

Posted in Friday Thoughts       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=209&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>While walking our dogs recently, we came across several of these signs &#8212; ironically, in front of our neighborhood school.</p>
<p><a href="http://herbsutter.files.wordpress.com/2009/01/please-clean-up.png"><img height="480" alt="Please Clean Up" src="http://herbsutter.files.wordpress.com/2009/01/please-clean-up-thumb.png?w=360&#038;h=480" width="360"></a></p>
Posted in Friday Thoughts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/209/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=209&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/01/16/from-the-we-know-what-they-meant-but-its-not-what-they-said-department/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2009/01/please-clean-up-thumb.png" medium="image">
			<media:title type="html">Please Clean Up</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: volatile vs. volatile</title>
		<link>http://herbsutter.wordpress.com/2009/01/12/effective-concurrency-volatile-vs-volatile/</link>
		<comments>http://herbsutter.wordpress.com/2009/01/12/effective-concurrency-volatile-vs-volatile/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 09:12:15 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C# / .NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/01/12/effective-concurrency-volatile-vs-volatile/</guid>
		<description><![CDATA[This month&#8217;s Effective Concurrency column, &#8220;volatile vs. volatile&#8221;, is now live on DDJ&#8217;s website and also appears in the print magazine. (As a historical note, it&#8217;s DDJ&#8217;s final print issue, as I mentioned previously.)
This article aims to answer the frequently asked question: &#8220;What does volatile mean?&#8221; The short answer: &#8220;It depends, do you mean Java/.NET [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=205&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month&#8217;s <strong>Effective Concurrency</strong> column, <strong><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">&#8220;volatile vs. volatile&#8221;</a></strong>, is now live on DDJ&#8217;s website and also appears in the print magazine. (As a historical note, it&#8217;s DDJ&#8217;s final print issue, as I <a href="http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/">mentioned previously</a>.)</p>
<p>This article aims to answer the frequently asked question: &#8220;What does volatile mean?&#8221; The short answer: &#8220;It depends, do you mean Java/.NET volatile or C/C++ volatile?&#8221; From the article:</p>
<blockquote><p>What does the <b>volatile</b> keyword mean? How should you use it? Confusingly, there are two common answers, because depending on the language you use volatile supports one or the other of two different programming techniques: lock-free programming, and dealing with &#8216;unusual&#8217; memory.</p>
<p>Adding to the confusion, these two different uses have overlapping requirements and impose overlapping restrictions, which makes them appear more similar than they are. Let&#8217;s define and understand them clearly, and see how to spell them correctly in C, C++, Java and C# &#8212; and not always as <b>volatile</b>. &#8230;</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns and the DDJ print magazine issue in which they first appeared:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007)
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007)
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008)
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008)
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008)
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008)
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008)
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008)
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212701484">volatile vs. volatile</a> (Feb 2009)</p>
</blockquote>
Posted in C# / .NET, C++, Concurrency, Java  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=205&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/01/12/effective-concurrency-volatile-vs-volatile/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Answer to &quot;16 Technologies&quot;: Engelbart and the Mother of All Demos</title>
		<link>http://herbsutter.wordpress.com/2009/01/08/answer-to-16-technologies-engelbart-and-the-mother-of-all-demos/</link>
		<comments>http://herbsutter.wordpress.com/2009/01/08/answer-to-16-technologies-engelbart-and-the-mother-of-all-demos/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 09:59:59 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Opinion & Editorial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/01/08/answer-to-16-technologies-engelbart-and-the-mother-of-all-demos/</guid>
		<description><![CDATA[A few days ago I posted a challenge to name the researcher/team and approximate year each of the following 16 important technologies was first demonstrated. In brief, they were:

The personal computer for dedicated individual use all day long.
The mouse.
Internetworks.
Network service discovery.
Live collaboration and desktop/app sharing.
Hierarchical structure within a file system and within a document.
Cut/copy/paste, with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=192&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A few days ago <a href="http://herbsutter.wordpress.com/2009/01/05/16-important-technologies-who-demonstrated-each-one-first/">I posted a challenge</a> to name the researcher/team and approximate year each of the following 16 important technologies was first demonstrated. In brief, they were:</p>
<ul>
<li>The personal computer for dedicated individual use all day long.
<li>The mouse.
<li>Internetworks.
<li>Network service discovery.
<li>Live collaboration and desktop/app sharing.
<li>Hierarchical structure within a file system and within a document.
<li>Cut/copy/paste, with drag-and-drop.
<li>Paper metaphor for word processing.
<li>Advanced pattern search and macro search.
<li>Keyword search and multiple weighted keyword search.
<li>Catalog-based information retrieval.
<li>Flexible interactive formatting and line drawing.
<li>Hyperlinks within a document and across documents.
<li>Tagging graphics, and parts of graphics, as hyperlinks.
<li>Shared workgroup document collaboration with annotations etc.
<li><em>Live</em> shared workgroup collaboration with live audio/video teleconference in a window. </li>
</ul>
<h4><strong>A single answer to all of the above: </strong><a href="http://en.wikipedia.org/wiki/Doug_Engelbart"><strong>Doug Engelbart</strong></a><strong> and his ARC team, in what is now known as </strong><a href="http://en.wikipedia.org/wiki/The_Mother_of_All_Demos"><strong>&#8220;The Mother of All Demos&#8221;</strong></a><strong>, on Monday, December 9, 1968.</strong></h4>
<p><img style="margin:0 0 0 10px;" height="387" src="http://sloan.stanford.edu/MouseSite/dce1968conferenceannouncement.jpg" width="290" align="right">Last month, we marked the 40th anniversary of the famous <a href="http://en.wikipedia.org/wiki/The_Mother_of_All_Demos">Engelbart Demo</a>, a truly unique &#8220;Eureka!&#8221; moment in the history of computing. 40 years go, Engelbart and his visionary team foresaw &#8212; <em>and prototyped and demonstrated</em> &#8212; many essential details of what we take for granted as our commonplace computing environment today, including all of the above-listed technologies, most of them demonstrated for the first time in that talk.</p>
<p>This talk would be noteworthy and historic just for being the first time a &#8220;mouse&#8221; was shown and called by that name. Yet the mouse was just one of over a dozen important innovations to be compellingly presented with working prototype implementations.</p>
<p>Note: Yes, some of the individual technologies have earlier theoretical roots. I deliberately phrased the question to focus on implementations because <strong>it&#8217;s great to imagine a new idea, but it isn&#8217;t engineering until we prove it can work by actually building it.</strong> For example, consider hypertext: Vannevar Bush&#8217;s <a href="http://en.wikipedia.org/wiki/Memex">Memex</a>, vintage 1945, was a theorectical &#8220;proto-hypertext&#8221; system but it unfortunately remained theoretical, understandably so given the nascent state of computers at the time. <a href="http://en.wikipedia.org/wiki/Project_Xanadu">Project Xanadu</a>, started in 1960, pursued similar ideas but wasn&#8217;t demonstrated until 1972. The Engelbart Demo was the first time that hypertext was publicly shown in a working form, together with a slew of other important working innovations that combined to deliver an unprecedented <em>tour de force</em>. What made it compelling wasn&#8217;t just the individual ideas, but the working demonstrations to show that the ideas worked and how they could combine and interact in wonderful ways.</p>
<h4><strong>Recommended viewing</strong></h4>
<p>You can watch the 100-minute talk <a href="http://sloan.stanford.edu/MouseSite/1968Demo.html">here (Stanford University)</a> in sections with commentary, and <a href="http://video.google.com/videoplay?docid=-8734787622017763097">here (Google Video)</a> all in one go.</p>
Posted in Hardware, Opinion &amp; Editorial, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=192&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/01/08/answer-to-16-technologies-engelbart-and-the-mother-of-all-demos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://sloan.stanford.edu/MouseSite/dce1968conferenceannouncement.jpg" medium="image" />
	</item>
		<item>
		<title>16 Important Technologies: Who demonstrated each one first?</title>
		<link>http://herbsutter.wordpress.com/2009/01/05/16-important-technologies-who-demonstrated-each-one-first/</link>
		<comments>http://herbsutter.wordpress.com/2009/01/05/16-important-technologies-who-demonstrated-each-one-first/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 09:48:15 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Opinion & Editorial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2009/01/05/16-important-technologies-who-demonstrated-each-one-first/</guid>
		<description><![CDATA[We enjoy such an abundance of computing riches that it&#8217;s easy to take wonderful technological ideas for granted. Yet so many of the pieces of our modern computing experience that we consider routine today were at one time unimaginable. After all, back in the early days of computing, we were still discovering what these newfangled [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=191&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We enjoy such an abundance of computing riches that it&#8217;s easy to take wonderful technological ideas for granted. Yet so many of the pieces of our modern computing experience that we consider routine today were at one time unimaginable. After all, back in the early days of computing, we were still discovering what these newfangled room-filling gadgets might eventually become capable of &#8212; who could have known then what using computers would be like today?</p>
<p>Of course, we have these technologies today because some visionaries did know, did imagine them&#8230; and, best of all, built and demonstrated them.</p>
<p>Hence today&#8217;s challenge:</p>
<p><span style="color:#008040;"><strong>Quiz: </strong>For each of the following 16 technologies that have become commonplace in our modern computing experience, give the researcher/team and approximate year that a working prototype was first demonstrated. How many can you answer <em>without</em> a web search?</span></p>
<ul>
<li><strong>The personal computer</strong> for dedicated individual use, that one person can have at their disposal all day long. <em>(Hint: Before the </em><a href="http://en.wikipedia.org/wiki/Altair_8800"><em>Altair</em></a><em> in 1975 and </em><a href="http://en.wikipedia.org/wiki/Apple_I"><em>Apple I</em></a><em> in 1976.)</em></li>
<li><strong>Mouse input with a graphical pointer.</strong> <em>(Hint: Before the <a href="http://en.wikipedia.org/wiki/Xerox_Alto">Xerox Alto</a> at Xerox PARC in 1973.)</em></li>
<li><strong>Internetworks</strong> across campuses and cities. <em>(Hint: Before <a href="http://en.wikipedia.org/wiki/Ethernet">Ethernet</a> at Xerox PARC (again) in 1973.)</em></li>
<li><strong>Discovery of &#8216;who&#8217;s got what service&#8217; in an internetwork.</strong></li>
<li><strong>Using internetworks for live collaboration</strong>, not just file sharing. <em>(Hint: Before </em><a href="http://en.wikipedia.org/wiki/Remote_Desktop_Connection#Remote_Desktop_Connection"><em>RDP</em></a><em> and </em><a href="http://en.wikipedia.org/wiki/Comparison_of_remote_desktop_software"><em>others</em></a><em>.)</em></li>
<li><strong>Hierarchical structure</strong> within a file system and within a document. <em>(Hint: Before </em><a href="http://en.wikipedia.org/wiki/Unix"><em>Unix</em></a><em>.)</em></li>
<li><strong>Cut/copy/paste</strong>, with drag-and-drop.</li>
<li><strong>Paper metaphor for word processing</strong>, starting with a blank piece of paper and the applying  formatting and navigating levels in the structure of text.</li>
<li><strong>Advanced pattern search and macro search</strong> within documents. <em>(Hint: Before MIT&#8217;s </em><a href="http://en.wikipedia.org/wiki/Emacs"><em>Emacs</em></a><em>.)</em></li>
<li><strong>Keyword search and multiple weighted keyword search.</strong> <em>(Hint: Long before <strong><a title="You don't really need a link for Google, do you?" href="http://www.youtube.com/watch?v=Yu_moia-oVI">Google</a></strong> (<a title="You clicked a link for Google?! Really??" href="http://www.yougotrickrolled.com/">alternate link</a>).)</em></li>
<li>Information retrieval through <strong>indirect construction of a catalog.</strong></li>
<li><strong>Flexible interactive formatting and line drawing.</strong></li>
<li><strong>Hyperlinks </strong>within a document and across documents, and &#8220;jumping on a link&#8221; to navigate. <em>(Hint: Before </em><a href="http://www.w3.org/People/Berners-Lee/"><em>Tim Berners-Lee</em></a><em> invented the </em><a href="http://www.w3.org/People/Berners-Lee/WorldWideWeb.html"><em>World Wide Web</em></a><em> in 1989-1990.) (Hint&#8217;: Yes, before </em><a href="http://en.wikipedia.org/wiki/HyperCard"><em>HyperCard</em></a><em> too.)</em></li>
<li><strong>Tagging graphics, and parts of graphics, as hyperlinks.</strong> <em>(Hint: Before </em><a href="http://www.flickr.com"><em>Flickr</em></a><em>.)</em></li>
<li><strong>Workgroup collaboration on a document, including collaborative annotations,</strong> allowing members of a group to use and modify a document. <em>(Hint: Before </em><a href="http://en.wikipedia.org/wiki/IBM_Lotus_Notes"><em>Lotus Notes</em></a><em> and </em><a href="http://en.wikipedia.org/wiki/Wiki"><em>Ward Cunningham&#8217;s Wikis</em></a><em>.)</em></li>
<li>The next step up from that: <strong>Live collaboration on a document with screen sharing</strong> on the two writers&#8217; computers so they can see what the other is doing &#8212; <strong>with live audio/video teleconference in a window </strong>at the same time. <em>(Hint: Not </em><a href="http://en.wikipedia.org/wiki/Skype"><em>Skype</em></a><em> or </em><a href="http://en.wikipedia.org/wiki/Livemeeting"><em>LiveMeeting</em></a><em>.)</em></li>
</ul>
Posted in Hardware, Opinion &amp; Editorial, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=191&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2009/01/05/16-important-technologies-who-demonstrated-each-one-first/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>The 2008 Media Inflection: Meet Dr. Web, the New Gorilla</title>
		<link>http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/</link>
		<comments>http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 00:42:51 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Opinion & Editorial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/</guid>
		<description><![CDATA[[edited 2009.01.15 to add link to DDJ's announcement]
2008 was quite a year, full of landmark events that were certainly historic, if not always welcome.
If I had to pick one technology-related highlight from the past year, it would be this: A notable inflection point in the ongoing shift from traditional media to the web. Given that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=178&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>[edited 2009.01.15 to add link to DDJ's announcement]</em></p>
<p>2008 was quite a year, full of landmark events that were certainly historic, if not always welcome.</p>
<p>If I had to pick one technology-related highlight from the past year, it would be this: A notable inflection point in the ongoing shift from traditional media to the web. Given that that tide is still in progress, why single out 2008? <strong>I think we&#8217;ll look back at 2008, especially the fourth quarter, as a turning point when the web became an <a href="http://en.wikipedia.org/wiki/A-list">A-list</a> media outlet and first started to beat up, and even replace, major legacy competitors in newspapers, technical magazines, movies, and TV.</strong> An inflection point, if you will, where the web clearly stopped being the pencil-necked upstart, and visibly emerged as the new <a href="http://www.constitutionlive.com/wp-content/uploads/mostwanted_lou.jpg">gorilla</a> flexing its advertising-revenue-pumped-up muscles and kicking sand on the others.</p>
<p>In 2008, and particularly in the last month, the web began to outright replace some existing newspapers and technology and programming magazines.</p>
<ul>
<li><strong>December 2008: The first two major city newspapers go web-only or web-mostly.</strong> <a href="http://www.detnews.com/apps/pbcs.dll/article?AID=/20081216/METRO/812160419">The Detroit News</a> and <a href="http://www.freep.com/article/20081216/FREEPRESS/81216032">The Detroit Free Press</a> announced truncated print editions and reduced print delivery. Newspapers in several other cities seem likely to follow fairly soon.</li>
<li><strong>As of January 2009: <a href="http://www.pcmag.com/">PC Magazine</a> is <a href="http://www.pcmag.com/article2/0,2817,2335009,00.asp">going &#8220;digital only.&#8221;</a></strong> After the January issue, the print magazine will disappear. Instead, the content will appear exclusively on the web.</li>
<li><strong>As of January 2009: </strong><a href="http://www.ddj.com"><strong>Dr. Dobb&#8217;s Journal</strong></a><strong> is permanently suspending print publication and<a href="http://www.ddj.com/linux-open-source/212700891"> going web-only</a></strong><strong>.</strong> Some of the content will be available as a new &#8220;Dr. Dobb&#8217;s Report&#8221; section of <a href="http://www.informationweek.com/">InformationWeek</a>. My Effective Concurrency column will continue, and I&#8217;ll continue to blog when new columns go live on the web, so if you&#8217;re reading the column via this blog nothing will significantly change for you.</li>
</ul>
<p>As of next month, the only major technical programmer&#8217;s trade magazines still available in print, that I know of, are platform- and technology-specific ones like <a href="http://www.aspnetpro.com/">asp.netPRO</a> and <a href="http://msdn.microsoft.com/en-us/magazine/default.aspx">MSDN Magazine</a> &#8212; and even those increasingly feature online-only content. For example, from MSDN Mag&#8217;s <a href="http://msdn.microsoft.com/en-us/magazine/2009.01.editorsnote.aspx">January 2009 editor&#8217;s note</a>:</p>
<blockquote><p>As we continue to grow our coverage to keep pace with the rapidly expanding set of technologies, we will often offer content exclusively online at <a href="http://msdn.microsoft.com/magazine">msdn.microsoft.com/magazine</a>. So please check in frequently!</p></blockquote>
<p>Gotta love RSS (and Atom etc.): Every text feed is like a magazine or newspaper column, every blogger a columnist. Every audio/video podcast feed is like a radio or TV series, or a radio station or TV channel. And our feed reader is the new magazine/newspaper, as we subscribe to columnists to make our personal custom newsmagazine. But RSS readers, along with RSS-consuming clients like iTunes, are more &#8212; they&#8217;re our personal selection, not only of the columns we want to read (on whatever topics we want, including the funnies section), but also of the media we want to hear and watch. It&#8217;s increasingly our way to choose the text, audio, and video we want all together. Who knew that a large chunk of the coming media convergence would come in the shape of RSS readers?</p>
<p>And other media are feeling the pressure from Dr. Web, the new gorilla:</p>
<ul>
<li><strong>This week (late December 2008), even cable operator Time Warner pushed web delivery for TV.</strong> Time Warner has had various contract disputes <a href="http://www.nytimes.com/2008/12/31/business/media/31cable.html?ref=media">with Viacom</a> and <a href="http://www.caller.com/news/2008/dec/31/time-warner-kiii-reach-agreement/">some local stations</a>. But as part of the dispute:
<ul>Time Warner will respond to Viacom’s advertisement, [Time Warner spokesman] Mr. Dudley said, by highlighting the availability of television content on the Internet.</p>
<p>“We will be telling our customers exactly where they can go to see these programs online,” Mr. Dudley said. “We’ll also be telling them how they can hook up their PCs to a television set.”</ul>
</li>
<li><strong>During October-December 2008, Netflix&#8217;s Watch Instantly has started to turn into a juggernaut.</strong> It&#8217;s interesting enough that you can watch 12,000+ movies and TV shows streamed over the net to your PC at high quality. As of <a href="http://www.engadget.com/2008/10/26/netflix-finally-brings-watch-instantly-to-macs-via-silverlight/">October 2008, you can get them on your Mac</a>. As of <a href="http://gamerscoreblog.com/press/archive/2008/11/19/562420.aspx">November 2008, on your Xbox</a>. As of <a href="http://blog.netflix.com/2008/12/tivo-dvrs-now-stream-movies-from.html">December 2008, on your TiVo</a>. As noted in one recent <a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2008/12/24/BUR214QV6B.DTL">article</a>:
<ul>&#8220;It&#8217;s a good strategic move,&#8221; said Andy Hargreaves, an analyst with Pacific Crest Securities. &#8220;Netflix sees the world will go digital, no matter what they do. They realize there is more to be lost by waiting than doing it early.&#8221;</ul>
</li>
</ul>
<p>And I won&#8217;t even get started on SaaS: hosted rich GUI apps served up on the web, for example the <a href="http://www.reuters.com/article/technologyNews/idUSTRE4B75MP20081208">December 2008 (again) announcement about Office Online</a>.</p>
<p>Yes, don&#8217;t forget 2008, especially December 2008: The month the first major newspapers moved mostly to the web and abandoned print at least partly; the month that PC Magazine and Dr. Dobb&#8217;s suspended print publication and went web-only; the month Netflix Watch Instantly arrived in the living room on TiVos after hitting Xboxes a fortnight before; the month cable provider Time Warner threatened to tell people to watch TV on the net; and the month even Microsoft announced their intent to deliver significant Office web applications.</p>
<p>I for one welcome Dr. Web, our new Gorilla and media overlord!</p>
<p>Besides, what choice do I have?</p>
Posted in Opinion &amp; Editorial, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/178/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=178&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/12/31/the-2008-media-inflection-meet-dr-web-the-new-gorilla/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>TRS-80 vs. Alpha, and Parallel Optimization</title>
		<link>http://herbsutter.wordpress.com/2008/12/19/trs-80-vs-alpha-and-parallel-optimization/</link>
		<comments>http://herbsutter.wordpress.com/2008/12/19/trs-80-vs-alpha-and-parallel-optimization/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 22:49:47 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/12/19/trs-80-vs-alpha-and-parallel-optimization/</guid>
		<description><![CDATA[Lest people get the wrong idea, I enjoy reading Jeff Atwood&#8217;s blog and agree with much of what he writes so entertainingly and provocatively. So far I&#8217;ve only responded when I strongly felt differently about something, which has been a grand total of twice now.
So let me also offer an example of something I wholeheartedly [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=177&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Lest people get the wrong idea, I enjoy reading Jeff Atwood&#8217;s <a href="http://www.codinghorror.com/blog/">blog</a> and agree with much of what he writes so entertainingly and provocatively. So far I&#8217;ve only responded when I strongly felt differently about something, which has been a grand total of twice now.</p>
<p>So let me also offer an example of something I wholeheartedly agree with. Yesterday, <a href="http://www.codinghorror.com/blog/archives/001198.html">Jeff cited</a> what is also my own favorite <a href="http://www.amazon.com/exec/obidos/ASIN/0201657880">Programming Pearls</a> figure:</p>
<p>&nbsp;</p>
<blockquote><p>Despite the enduring wonder of the yearly parade of newer, better hardware, we&#8217;d also do well to remember my all time favorite graph from <a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/codinghorror-20">Programming Pearls</a>:
<p><a href="http://www.amazon.com/exec/obidos/ASIN/0201657880"><img style="border-width:0;" height="330" alt="trs80vsalpha" src="http://herbsutter.files.wordpress.com/2008/12/trs80vsalpha.png?w=600&#038;h=330" width="600" border="0"></a></p>
<p><a href="http://www.codinghorror.com/blog/archives/000957.html">Everything is fast for small n</a>.</p>
</blockquote>
<p><font color="#666666">Spot on. If you&#8217;re a professional programmer and haven&#8217;t read <a href="http://www.amazon.com/exec/obidos/ASIN/0201657880">Programming Pearls</a> yet, &#8220;run don&#8217;t walk&#8221; to your bookstore of choice.</font></p>
<p><font color="#666666">Incidentally, just to tie this in to parallel computing as well, Jeff&#8217;s article also cites a nice graph of optimizations that improved NDepend:</font></p>
<blockquote><p>Patrick Smacchia&#8217;s <a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/12/01/lessons-learned-from-a-real-world-focus-on-performance.aspx">lessons learned from a real-world focus on performance</a> is a great case study in optimization. </p>
<p><img height="240" alt="ndepend optimization graph" src="http://www.codinghorror.com/blog/images/ndepend-optimization-graph.png" width="600" border="0">
<p>Patrick was able to improve <a href="http://www.ndepend.com/">nDepend</a> analysis performance fourfold, and cut memory consumption in half. As predicted, most of this improvement was algorithmic in nature, but at least half of the overall improvement came from a variety of different optimization techniques.</p>
</blockquote>
<p><font color="#666666">As I&#8217;ve said many times, measure twice, optimize once: Know when and where to optimize. Profilers are your friend. As </font><font color="#666666"><a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/12/01/lessons-learned-from-a-real-world-focus-on-performance.aspx">Patrick writes</a>:</font></p>
<blockquote><p><font color="#666666">When it comes to enhancing performance there is only one way to do things right: <b>measure</b> and focus your work on the part of the code that <b>really</b> takes the bulk of time, not the one that <b>you think</b> takes the bulk of time.</font></p>
</blockquote>
<p><font color="#666666">And of course, in our ever-more-multicore world, the contribution of parallelization gain will continue to grow and dominate the optimization of CPU-bound code. But as Patrick also notes, realizing that gain is not always trivial:</font></p>
<blockquote><p>While we get the 15% gain from between 1 and 2 processors, the gain is almost zero between 2 and 4 processors. We identified some<a href="http://msdn.microsoft.com/en-us/magazine/cc872851.aspx"> potential IO contentions and memory issues</a> that will require more attention in the future. This leads to another lesson: <b>Don’t expect that scaling on many processors will be something easy, even if you don’t share states and don’t use synchronization.</b></p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=177&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/12/19/trs-80-vs-alpha-and-parallel-optimization/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2008/12/trs80vsalpha.png" medium="image">
			<media:title type="html">trs80vsalpha</media:title>
		</media:content>

		<media:content url="http://www.codinghorror.com/blog/images/ndepend-optimization-graph.png" medium="image">
			<media:title type="html">ndepend optimization graph</media:title>
		</media:content>
	</item>
		<item>
		<title>Rich-GUI SaaS/Web 2.0 Apps Should Not Be Considered Harmful</title>
		<link>http://herbsutter.wordpress.com/2008/12/17/rich-gui-saasweb-20-apps-should-not-be-considered-harmful/</link>
		<comments>http://herbsutter.wordpress.com/2008/12/17/rich-gui-saasweb-20-apps-should-not-be-considered-harmful/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 01:23:32 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/12/17/rich-gui-saasweb-20-apps-should-not-be-considered-harmful/</guid>
		<description><![CDATA[Yesterday, the ever-popular Jeff Atwood (of Coding Horror fame) wrote an article [*] on how not to write Web 2.0 UIs. Unfortunately, it&#8217;s exactly backwards: What he identifies as a problem is in fact not only desirable, but necessary.

[*] Aside: Jeff, I know you love pictures, but is that particular gratuitous one really necessary? Yes, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=170&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday, the ever-popular Jeff Atwood (of Coding Horror fame) wrote <a href="http://www.codinghorror.com/blog/archives/000869.html">an article</a> [*] on how not to write Web 2.0 UIs. Unfortunately, it&#8217;s exactly backwards: What he identifies as a problem is in fact not only desirable, but necessary.</p>
<ul>
<li>[*] Aside: Jeff, I know you love pictures, but is that particular gratuitous one really necessary? Yes, I know it&#8217;s CGI, but it made me really hesitate about linking to your post and has nothing to do with your technical point.</li>
</ul>
<p>Jeff observes correctly that when you write an application to run on a platform like Windows and/or OS X, your application should follow the local look-and-feel. Fine so far. But he then repeats a claim that I believe is incorrect, at least today, and based on a fallacy &#8212; and adds another fallacy:</p>
<blockquote><p>[Quoting Bill Higgins]</p>
<ul>
<li>&#8230; a Windows application <font color="#000000">should look and feel like a Windows application, a Mac application should look and feel like a Mac application, and a web application should look and feel like a web application.</font></li>
</ul>
<p>Bill extends this to web applications: <b>a web app that apes the conventions of a desktop application is attempting to cross the uncanny valley of user interface design.</b> This is a bad idea for all the same reasons; the tiny flaws and imperfections of the simulation will be grossly magnified for users.</p>
<p>&#8230;</p>
<ul>
<li>When you build a &#8220;desktop in the web browser&#8221;-style application, <b>you&#8217;re violating users&#8217; unwritten expectations of how a web application should look and behave.</b></li>
</ul>
</blockquote>
<p>There are actually two fallacies here.</p>
<h3>Fallacy #1: &#8220;Look and feel like a web application&#8221;</h3>
<p>The first fallacy is here:</p>
<blockquote><p>a web application should look and feel like a web application.</p>
<p>&#8230;</p>
<p>violating users&#8217; unwritten expectations of how a web application should look and behave.</p>
</blockquote>
<p>These assertions beg the question: What does a web application &#8220;look and feel like,&#8221; and what do users expect? Also, are you talking about Web 1.0, where there is an answer to these questions, or Web 2.0, <em>where there isn&#8217;t</em>?</p>
<p>For Web 1.0 applications, the answer is fairly easy: They look like hyperlinked documents built on technologies like HTML and CSS. That&#8217;s what people expect, and get.</p>
<p>But the examples Bill uses aren&#8217;t Web 1.0 applications, they&#8217;re Web 2.0 applications. For Web 2.0 applications, there are no widely accepted UI standards, and applications are all over the map. Indeed, the whole point of Ajax-y/Web2.0-y applications is to get beyond the current 1.0-standard functionality.</p>
<p>Not only are there are no widely-accepted UI standards, there aren&#8217;t even many widely-accepted UI technologies. Consider how many dissimilarities there are among just Flash, Silverlight, and JavaFX as these technologies compete for developer share. Then consider that even <em>within</em> any one of these technologies people actually build wildly diverse interfaces.</p>
<p>Here&#8217;s the main example these bloggers used:</p>
<blockquote><p>Consider the Zimbra web-based email that Bill refers to.
<p><img height="393" alt="zimbra email" src="http://www.codinghorror.com/blog/images/zimbra-email-small.png" width="602" border="0">
<p>It&#8217;s pretty obvious that their inspiration was Microsoft Outlook, a desktop application.
<p><img height="400" alt="outlook email" src="http://www.codinghorror.com/blog/images/outlook-email-small.png" width="612" border="0"></p>
</blockquote>
<p>But what&#8217;s wrong with Zimbra?</p>
<p>Here&#8217;s a Better Question #1: How could you do better?</p>
<p>And for bonus points, Still Better Question #2: What about OWA? Consider that Microsoft already provides essentially the same thing, with the same approach, in the form of <a href="http://en.wikipedia.org/wiki/Outlook_Web_Access">Outlook Web Access</a>, which looks remarkably like the usual Outlook [caveat: this is an example of why I write above and below that 'most' Web 2.0 apps don't try to emulate a particular OS look-and-feel; this one does]. For example (a couple of sample shots taken from <a href="http://www.microsoft.com/exchange/code/OWA/index.html">this brief video overview</a>):</p>
<ul>
<li><a href="http://herbsutter.files.wordpress.com/2008/12/image.png"><img style="border-width:0;" height="422" alt="image" src="http://herbsutter.files.wordpress.com/2008/12/image-thumb.png?w=640&#038;h=422" width="640" border="0"></a><br /><a href="http://herbsutter.files.wordpress.com/2008/12/image1.png"><img style="border-width:0;" height="425" alt="image" src="http://herbsutter.files.wordpress.com/2008/12/image-thumb1.png?w=640&#038;h=425" width="640" border="0"></a> </li>
</ul>
<p>The rich UI isn&#8217;t a bug, it really is a feature &#8212; a killer feature we&#8217;re going to be seeing more of, not less of, because this is what delivering <a href="http://en.wikipedia.org/wiki/Software_as_a_service">software-as-a-service (SaaS)</a> is all about. Although I use the desktop Outlook most of the time, I like OWA and think it&#8217;s the best web-based email and calendaring I&#8217;ve seen especially when I&#8217;m away from my machine (and I&#8217;ve tried several others, though granted you do need to be using Exchange). I suspect its UI conventions are probably pretty accessible even to non-Windows users, though that&#8217;s probably debatable and your mileage may vary.</p>
<h3>Fallacy #2: &#8220;A web app that apes the conventions of a desktop application is [wrong]&#8220;</h3>
<p>The second fallacy is Jeff&#8217;s comment (boldface original):</p>
<blockquote><p><b>a web app that apes the conventions of a desktop application is attempting to cross the uncanny valley of user interface design.</b></p>
</blockquote>
<p>I think this is flawed for three reasons.</p>
<p>First, the &#8220;uncanny valley&#8221; part makes the assumption that people will find it jarring that the app tries to look like a desktop application. (This concern is related to, but different from, the concern of fallacy #1.) But most such apps aren&#8217;t doing that at all, because they know their users will access them from PCs, Macs, and lots of different environments, and they have to look reasonable regardless of the user&#8217;s native environment. They&#8217;re usually not trying to duplicate a given platform&#8217;s native look and feel.</p>
<p>Second, what they are doing is borrowing from UI components and conventions that already work well in desktop GUI environments, and are common across many of those environments. When you have no standards for Web 2.0 look and feel, then doing the best you can by borrowing from ideas we already know work pretty well isn&#8217;t just okay, it&#8217;s necessary. What else can you do?</p>
<p>Finally, the worst part is this: The whole point of <a href="http://en.wikipedia.org/wiki/Software_as_a_service">SaaS</a> is to deliver desktop-like rich-GUI applications on the web. So what is being labeled &#8216;wrong&#8217; above <em>is the whole point</em> of what we&#8217;re doing as an industry.</p>
<h3>&#8220;SaaS/Web 2.0 on Web 1.0&#8243;: The new &#8220;GUI on DOS&#8221;</h3>
<p>Most SaaS/Web 2.0 applications today look and feel pretty much the way GUI applications looked and felt like on DOS, before technologies like Windows and OS/2 PM existed. Around the late 1980s, people wrote lots of GUI applications that ran on DOS, but we didn&#8217;t have a widely-used common GUI infrastructure that handled basic windows and menus and events, much less standards like <a href="http://en.wikipedia.org/wiki/Common_User_Access">CUA</a> that tried to say how to use such a common infrastructure if we had it. So they each did their own thing, borrowing where possible from what seemed to work well for GUIs on other platforms.</p>
<p>Twenty years ago, everyone writing GUIs on DOS designed the UIs as best they could, borrowing where possible from what they saw worked on platforms like the Macintosh and Xerox Alto and Star &#8212; but the results were all over the map, and would stay that way until a standard environment, followed by standard guidelines, came into being.</p>
<p>Today, everyone writing rich Web 2.0 applications is doing their own thing, borrowing as best they can from Macs and Windows and others &#8212; but the results are all over the map, and will continue to be until there actually is such a thing as a UI standard for rich-GUI web applications. You can see that in the differences between Zimbra and Outlook Web Access. In the meantime, it&#8217;s not just okay to borrow from what we&#8217;ve learned on the desktop; it&#8217;s necessary.</p>
<p>And the question isn&#8217;t whether metaphors users already understand on the desktop will migrate to the web, but which ones and how soon, because it&#8217;s the whole point of SaaS. The industry will soon be going well beyond Google Apps; with offerings like Office Online already announced for the short term, which puts still more rich-client GUI apps like word processors and spreadsheets in the browser (with functionality somewhere between Google Apps and the desktop version of Office).</p>
<p><strong>Zimbra and Outlook Web Access aren&#8217;t examples of poor web app design, but exactly the opposite: They&#8217;re just the beginning of the next wave of rich web apps.</strong></p>
Posted in Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=170&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/12/17/rich-gui-saasweb-20-apps-should-not-be-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://www.codinghorror.com/blog/images/zimbra-email-small.png" medium="image">
			<media:title type="html">zimbra email</media:title>
		</media:content>

		<media:content url="http://www.codinghorror.com/blog/images/outlook-email-small.png" medium="image">
			<media:title type="html">outlook email</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2008/12/image-thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2008/12/image-thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Measuring Parallel Performance &#8212; Optimizing a Concurrent Queue</title>
		<link>http://herbsutter.wordpress.com/2008/12/02/effective-concurrency-measuring-parallel-performance-optimizing-a-concurrent-queue/</link>
		<comments>http://herbsutter.wordpress.com/2008/12/02/effective-concurrency-measuring-parallel-performance-optimizing-a-concurrent-queue/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 00:00:13 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/12/02/effective-concurrency-measuring-parallel-performance-optimizing-a-concurrent-queue/</guid>
		<description><![CDATA[This month&#8217;s Effective Concurrency column is special &#8212; it turned into a feature-length article. (I don&#8217;t know whether it&#8217;ll officially be called a &#8220;feature&#8221; or a &#8220;column&#8221; in the print issue.) &#8220;Measuring Parallel Performance: Optimizing a Concurrent Queue&#8221; just went live on DDJ&#8217;s site, and will also appear in the print magazine.
From the article:
How would [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=164&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This month&#8217;s <strong>Effective Concurrency</strong> column is special &#8212; it turned into a feature-length article. (I don&#8217;t know whether it&#8217;ll officially be called a &#8220;feature&#8221; or a &#8220;column&#8221; in the print issue.) <strong><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">&#8220;Measuring Parallel Performance: Optimizing a Concurrent Queue&#8221;</a></strong> just went live on DDJ&#8217;s site, and will also appear in the print magazine.</p>
<p>From the article:</p>
<blockquote><p>How would you write a fast, internally synchronized queue, one that callers can use without any explicit external locking or other synchronization? Let us count the ways&#8230;or four of them, at least, and compare their performance. We&#8217;ll start with a baseline program and then successively apply three optimization techniques, each time stopping to measure each change&#8217;s relative performance for queue items of different sizes to see how much each trick really bought us.</p>
</blockquote>
<p>The goal of the article is to see how to measure and understand our code&#8217;s parallel performance and measure the actual effect of specific optimizations. <strong>Disclaimer:</strong> The goal of this article is <strong>not</strong> to write the fastest possible queue in the world (though it&#8217;s pretty good). I&#8217;ve already had plenty of email on recent queue-related columns from people who sent me their &#8220;faster&#8221; implementations; writing lock-free queues seems to be a popular indoor sport. Interestingly, for well of half of the ones I received, a 30-second glance at the code was enough to determine that the code had to be incorrect. Why? Because if it doesn&#8217;t do any synchronization on the shared variables &#8212; if there aren&#8217;t any locks, atomics, fences or other synchronization in the code &#8212; then it has races, which will manifest in practice even on forgiving platforms like x86/x64, and there&#8217;s no need to look further. (For more details, see the September 2008 column, <a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a>. Even some code submissions I received in response to that very article were broken for the same reasons shown in that article.)</p>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns and the DDJ print magazine issue in which they first appeared:</p>
<blockquote><p><a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a> (Aug 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a> (Sep 2007)
<p><a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a> (Oct 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a> (Nov 2007)
<p><a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a> (Dec 2007)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a> (Jan 2008)
<p><a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a> (Feb 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a> (Mar 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a> (Apr 2008)
<p><a href="http://ddj.com/architect/207100682">Interrupt Politely</a> (May 2008)
<p><a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a> (Jun 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a> (Jul 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a> (Aug 2008)
<p><a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a> (Sep 2008)
<p><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a> (Oct 2008)
<p><a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a> (Nov 2008)
<p><a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a> (Dec 2008)</p>
<p><a href="http://www.ddj.com/hpc-high-performance-computing/212201163">Measuring Parallel Performance: Optimizing a Concurrent Queue</a> (Jan 2009)</p>
</blockquote>
Posted in Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=164&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/12/02/effective-concurrency-measuring-parallel-performance-optimizing-a-concurrent-queue/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>(out of order) Effective Concurrency: Writing Lock-Free Code &#8212; A Corrected Queue</title>
		<link>http://herbsutter.wordpress.com/2008/11/02/out-of-order-effective-concurrency-writing-lock-free-code-a-corrected-queue/</link>
		<comments>http://herbsutter.wordpress.com/2008/11/02/out-of-order-effective-concurrency-writing-lock-free-code-a-corrected-queue/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 18:25:16 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/11/02/out-of-order-effective-concurrency-writing-lock-free-code-a-corrected-queue/</guid>
		<description><![CDATA[Oops, I just noticed that I forgot to blog about one recent Effective Concurrency column: &#8220;Writing Lock-Free Code: A Corrected Queue&#8221; which also appeared in the October 2008 print issue of Dr. Dobb&#8217;s Journal.
From the article:

As we saw last month [1], lock-free coding is hard even for experts. There, I dissected a published lock-free queue [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=161&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Oops, I just noticed that I forgot to blog about one recent <strong>Effective Concurrency</strong> column: <strong><a href="http://www.ddj.com/hpc-high-performance-computing/210604448">&#8220;Writing Lock-Free Code: A Corrected Queue&#8221;</a></strong> which also appeared in the October 2008 print issue of <em>Dr. Dobb&#8217;s Journal</em>.</p>
<p>From the article:</p>
<blockquote>
<p>As we saw last month [1], lock-free coding is hard even for experts. There, I dissected a published lock-free queue implementation [2] and examined why the code was quite broken. This month, let&#8217;s see how to do it right.</p></blockquote>
<p>Here is the complete-as-of-this-writing set of links to the published Effective Concurrency columns. As always, the months reflect the magazine print issue dates; they usually hit the web a bit sooner:</p>
<blockquote><p>August 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a>
<p>September 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a>
<p>October 2007: <a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a>
<p>November 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a>
<p>December 2007: <a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a>
<p>January 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a>
<p>February 2008: <a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a>
<p>March 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a>
<p>April 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a>
<p>May 2008: <a href="http://ddj.com/architect/207100682">Interrupt Politely</a>
<p>June 2008: <a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a>
<p>July 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a>
<p>August 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a>
<p>September 2008: <a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a>
<p>October 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a>
<p>November 2008: <a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a>
<p>December 2008: <a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a></p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=161&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/11/02/out-of-order-effective-concurrency-writing-lock-free-code-a-corrected-queue/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Understanding Parallel Performance</title>
		<link>http://herbsutter.wordpress.com/2008/11/02/effective-concurrency-understanding-parallel-performance/</link>
		<comments>http://herbsutter.wordpress.com/2008/11/02/effective-concurrency-understanding-parallel-performance/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 18:15:29 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/11/02/effective-concurrency-understanding-parallel-performance/</guid>
		<description><![CDATA[Wow, DDJ just posted the previous one a few days ago, and already the next Effective Concurrency column is available: &#8220;Understanding Parallel Performance&#8221; just went live, and will also appear in the print magazine.
From the article:
Let&#8217;s say that we&#8217;ve slickly written our code to apply divide-and-conquer algorithms and concurrent data structures and parallel traversals and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=160&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Wow, DDJ just posted the previous one a few days ago, and already the next <strong>Effective Concurrency</strong> column is available: <a href="http://www.ddj.com/cpp/211800538"><strong>&#8220;Understanding Parallel Performance&#8221;</strong></a> just went live, and will also appear in the print magazine.</p>
<p>From the article:</p>
<blockquote><p>Let&#8217;s say that we&#8217;ve slickly written our code to apply divide-and-conquer algorithms and concurrent data structures and parallel traversals and all our other cool tricks that make our code wonderfully scalable in theory. Question: How do we know how well we&#8217;ve actually succeeded? Do we really know, or did we just try a couple of tests on a quad-core that looked reasonable and call it good? What key factors must we measure to understand our code&#8217;s performance, and answer not only whether our code scales, but quantify how well under different circumstances and workloads? What costs of concurrency do we have to take into account?
<p>This month, I&#8217;ll summarize some key issues we need to keep in mind to accurately analyze the real performance of our parallel code. I&#8217;ll list some basic considerations, and then some common costs. Next month, I have a treat in store: We&#8217;ll take some real code and apply these techniques to analyze its performance in detail as we successively apply a number of optimizations and measure how much each one actually buys us, under what conditions and in what directions, and why.</p>
</blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns (based on the magazine print issue dates):</p>
<blockquote><p>August 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a>
<p>September 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a>
<p>October 2007: <a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a>
<p>November 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a>
<p>December 2007: <a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a>
<p>January 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a>
<p>February 2008: <a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a>
<p>March 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a>
<p>April 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a>
<p>May 2008: <a href="http://ddj.com/architect/207100682">Interrupt Politely</a>
<p>June 2008: <a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a>
<p>July 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a>
<p>August 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a>
<p>September 2008: <a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a>
<p>October 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a>
<p>November 2008: <a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a>
<p>December 2008: <a href="http://www.ddj.com/cpp/211800538">Understanding Parallel Performance</a></p>
</blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=160&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/11/02/effective-concurrency-understanding-parallel-performance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency: Writing a Generalized Concurrent Queue</title>
		<link>http://herbsutter.wordpress.com/2008/10/30/effective-concurrency-writing-a-generalized-concurrent-queue/</link>
		<comments>http://herbsutter.wordpress.com/2008/10/30/effective-concurrency-writing-a-generalized-concurrent-queue/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 14:18:03 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/10/30/effective-concurrency-writing-a-generalized-concurrent-queue/</guid>
		<description><![CDATA[The next Effective Concurrency column, “Writing a Generalized Concurrent Queue”, just went live on DDJ’s site, and also appears in the print magazine.
From the article:
Last month [1], I showed code for a lock-free queue that supported the limited case of exactly two threads—one producer, and one consumer. That&#8217;s useful, but maybe not as exciting now [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=150&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The next <strong>Effective Concurrency</strong> column, <strong><a href="http://www.ddj.com/cpp/211601363">“Writing a Generalized Concurrent Queue”</a></strong>, just went live on DDJ’s site, and also appears in the print magazine.</p>
<p>From the article:</p>
<blockquote><p>Last month [1], I showed code for a lock-free queue that supported the limited case of exactly two threads—one producer, and one consumer. That&#8217;s useful, but maybe not as exciting now that our first rush of lock-free coding glee has worn off. This month, let&#8217;s tackle the general problem of supporting multiple producers and multiple consumers with as much concurrency as possible. The code in this article uses four main design techniques: &#8230;</p></blockquote>
<p>I hope you enjoy it. Finally, here are links to previous Effective Concurrency columns (based on the magazine print issue dates):</p>
<blockquote><p>August 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/200001985">The Pillars of Concurrency</a></p>
<p>September 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/201202924">How Much Scalability Do You Have or Need?</a></p>
<p>October 2007: <a href="http://ddj.com/cpp/201804238">Use Critical Sections (Preferably Locks) to Eliminate Races</a></p>
<p>November 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/202401098">Apply Critical Sections Consistently</a></p>
<p>December 2007: <a href="http://ddj.com/architect/202802983">Avoid Calling Unknown Code While Inside a Critical Section</a></p>
<p>January 2007: <a href="http://www.ddj.com/hpc-high-performance-computing/204801163">Use Lock Hierarchies to Avoid Deadlock</a></p>
<p>February 2008: <a href="http://www.ddj.com/cpp/205900309">Break Amdahl’s Law!</a></p>
<p>March 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206100542">Going Superlinear</a></p>
<p>April 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/206903306">Super Linearity and the Bigger Machine</a></p>
<p>May 2008: <a href="http://ddj.com/architect/207100682">Interrupt Politely</a></p>
<p>June 2008: <a href="http://ddj.com/architect/208200273">Maximize Locality, Minimize Contention</a></p>
<p>July 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/208801371">Choose Concurrency-Friendly Data Structures</a></p>
<p>August 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/209900973">The Many Faces of Deadlock</a></p>
<p>September 2008: <a href="http://www.ddj.com/cpp/210600279">Lock-Free Code: A False Sense of Security</a></p>
<p>October 2008: <a href="http://www.ddj.com/hpc-high-performance-computing/210604448">Writing Lock-Free Code: A Corrected Queue</a></p>
<p>November 2008: <a href="http://www.ddj.com/cpp/211601363">Writing a Generalized Concurrent Queue</a></p></blockquote>
Posted in Concurrency, Software Development  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=150&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/10/30/effective-concurrency-writing-a-generalized-concurrent-queue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>September 2008 ISO C++ Standards Meeting: The Draft Has Landed, and a New Convener</title>
		<link>http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/</link>
		<comments>http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 01:21:37 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/</guid>
		<description><![CDATA[The ISO C++ committee met in San Francisco, CA, on September 15-20. You can find the minutes here, including the votes to approve papers.
The most important thing the committee accomplished was this:
Complete C++0x draft published for international ballot
The biggest goal entering this meeting was to make C++0x feature-complete and stay on track to publish a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=149&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The ISO C++ committee met in San Francisco, CA, on September 15-20. You can find <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2784.html">the minutes here</a>, including the votes to approve papers.
<p>The most important thing the committee accomplished was this:<br />
<h3>Complete C++0x draft published for international ballot</h3>
<p>The biggest goal entering this meeting was to make C++0x feature-complete and stay on track to publish a complete public draft of C++0x for international review and comment — in ISO-speak, an official Committee Draft or CD. As I <a href="http://herbsutter.wordpress.com/2008/07/04/trip-report-june-2008-iso-c-standards-meeting/">predicted</a> in the summer, the committee achieved that at this meeting. Now the world will know the shape of C++0x in good detail. Here&#8217;s where to find it: <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf"><strong>The September C++0x working draft document</strong></a> is essentially the same as the September 2008 CD.
<p>This is “it”, feature-complete C++0x, including the major feature of &#8220;concepts&#8221; which had <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2754.html">its</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2755.htm">own</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2758.pdf">extensive</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2759.pdf">set</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2768.pdf">of</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2770.pdf">papers</a> for <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2773.pdf">language</a> and <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2774.pdf">library</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2776.pdf">extensions</a> &#8212; I&#8217;ll stop there, but there are still more concepts papers at the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/#mailing2008-10">mailing page</a> and some more still to come during the CD phase. (If you get the impression that concepts is a big feature, well, it is indeed easily the biggest addition we made in C++0x.)
<p>What&#8217;s next? As I&#8217;ve mentioned before, we’re planning to have two rounds of international comment review. The first of two opportunities for national bodies to give their comments is now underway; the second round will probably be this time next year. The only changes expected to be made between that CD and the final International Standard are bug fixes and clarifications. It’s helpful to think of a CD as a feature-complete beta, and we&#8217;re on track to ship one more beta before the full release.<br />
<h3>And a new convener</h3>
<p>On a personal note, I&#8217;m very happy to see this accomplished at the last meeting during my convenership. I&#8217;ve now served as secretary and then convener (chair) of the ISO C++ committee for over 10 years, and my second three-year term as convener ended one week after the San Francisco meeting. A decade is enough; I decided not to volunteer for another term as chair.
<p>As of a few weeks ago, <a href="http://www.plauger.com/"><strong>P. J. Plauger</strong></a> is the new convener of ISO/IEC JTC1/SC22/WG21 (C++). Many of you will know P.J. (or Bill, as he&#8217;s known within the committee) from his long service to the C and C++ communities, including that he has been a past convener of the ISO C standards committee, past editor of the C/C++ Users Journal, the principal author of the <a href="http://www.dinkumware.com">Dinkumware</a> implementation of the C++ standard library, and recipient of the <a href="http://www.ddj.com/architect/184405608">2004 Dr Dobb&#8217;s Journal Excellence in Programming Award</a>, among various other qualifications and honors. He has been a regular participant at ISO C++ meetings for about as long as they&#8217;ve been held, and his long experience with both the technology and the ISO standards world will serve WG21 well.
<p>I&#8217;m very happy to have been able to chair the committee during the development of C++0x. Now as we move from &#8220;develop mode&#8221; into &#8220;ship mode&#8221; it will be great to have his experienced hand guiding the committee through the final ISO process. Thanks for volunteering, Bill!</p>
Posted in C++  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=149&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/10/28/september-2008-iso-c-standards-meeting-the-draft-has-landed-and-a-new-convener/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Stroustrup &amp; Sutter on C++ 2008, Second Showing: October 30-31, 2008, in Boston, MA, USA</title>
		<link>http://herbsutter.wordpress.com/2008/10/01/stroustrup-sutter-on-c-2008-second-showing-october-30-31-2008-in-boston-ma-usa/</link>
		<comments>http://herbsutter.wordpress.com/2008/10/01/stroustrup-sutter-on-c-2008-second-showing-october-30-31-2008-in-boston-ma-usa/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 03:44:10 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Talks & Events]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/10/01/stroustrup-sutter-on-c-2008-second-showing-october-30-31-2008-in-boston-ma-usa/</guid>
		<description><![CDATA[ This spring at SD West in Santa Clara, Bjarne and I did a fresh-and-updated S&#38;S event with lots of new material.
We don&#8217;t usually repeat the same material, but this time there&#8217;s been such demand that we agreed to do a repeat&#8230; four weeks from today, in Boston. More information and talk descriptions follow.
CONTENT ADVISORY
Again, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=143&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://herbsutter.files.wordpress.com/2008/10/bjarne-and-herb-for-ss.jpg"><img style="border-width:0;" height="151" alt="Bjarne and Herb for S&amp;S" src="http://herbsutter.files.wordpress.com/2008/10/bjarne-and-herb-for-ss-thumb.jpg?w=235&#038;h=151" width="235" align="right" border="0"></a> This spring at SD West in Santa Clara, <a href="http://herbsutter.wordpress.com/2008/01/22/stroustrup-sutter-on-c-march-3-4-2008-in-santa-clara-ca-usa/">Bjarne and I did</a> a fresh-and-updated S&amp;S event with lots of new material.</p>
<p>We don&#8217;t usually repeat the same material, but this time there&#8217;s been such demand that we agreed to do a repeat&#8230; four weeks from today, in Boston. More information and talk descriptions follow.</p>
<h3>CONTENT ADVISORY</h3>
<p>Again, usually our S&amp;S events feature mostly new material, but <strong>this one is almost identical to the material we did in spring 2008 in Santa Clara.</strong> Bjarne is substituting one talk, and will present &#8220;C++ in Safety-Critical Systems&#8221; instead of his talk on C++&#8217;s design and evolution; and we&#8217;ll both be updating to the material to reflect the current state of the draft ISO C++0x standard. But otherwise it&#8217;ll be identical.</p>
<p>So:</p>
<ul>
<li>If you missed our event this spring, here&#8217;s your second chance! It was our highest-rated S&amp;S ever, and in the post-conference survey we asked the question &#8220;Would you recommend this course to a colleague?&#8221; and 100% said yes.
<li>If you already attended this spring and came to all our sessions, you&#8217;ve seen nearly all this material already, but feel free to encourage a friend or colleague to attend who you think would benefit from the material.</li>
</ul>
<h3>The Talks</h3>
<blockquote><p><strong>Wednesday, October 29, 2008 </strong></p>
<p>C++0x Overview (Bjarne Stroustrup)</p>
<p>Safe Locking: Best Practices to Eliminate Race Conditions (Herb Sutter)</p>
<p>How to Design Good Interfaces (Bjarne Stroustrup)</p>
<p>Lock-Free Programming in C++—or How to Juggle Razor Blades (Herb Sutter)</p>
<p>Grill the Experts: Ask Us Anything! (Bjarne Stroustrup &amp; Herb Sutter)</p>
<p><strong>Thursday, October 30, 2008</strong></p>
<p>["Best of Stroustrup &amp; Sutter"] Update of talk voted “Most Informative” at S&amp;S 2007: Concepts and Generic Programming in C++0x (Bjarne Stroustrup)</p>
<p>What Not to Code: Avoiding Bad Design Choices and Worse Implementations (Herb Sutter)</p>
<p>C++ in Safety-Critical Systems (Bjarne Stroustrup)</p>
<p>How to Migrate C++ Code to the Manycore &#8220;Free Lunch&#8221; (Herb Sutter)</p>
<p>Discussion on Questions Raised During the Seminar (Herb Sutter &amp; Bjarne Stroustrup)</p>
</blockquote>
<h3>Registration</h3>
<p>This two-day seminar is getting billing on two different conferences that are running at the same time in the Hynes Convention Center: <em><a href="http://sdbestpractices.com/index.php?option=com_content&amp;task=view&amp;id=23&amp;Itemid=92">SD Best Practices</a></em> and the <em><a href="http://www.cmp-egevents.com/web/escb/supersession">Embedded Systems Conference</a></em>. S&amp;S is technically part of both conferences, which means you can attend S&amp;S via either one&#8230; either</p>
<ul>
<li><a href="http://sdbestpractices.com/index.php?option=com_content&amp;task=view&amp;id=43&amp;Itemid=112"><strong>register via SDBP</strong></a>, or
<li><a href="http://techinsightsevents.com/web/escb/registration"><strong>register via ESC</strong></a> </li>
</ul>
<p>and both ways will include options that include our two-day seminar.</p>
<p>I look forward to seeing many of you in Boston! Best wishes,
<p>Herb  </p>
Posted in C++, Software Development, Talks &amp; Events  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=143&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/10/01/stroustrup-sutter-on-c-2008-second-showing-october-30-31-2008-in-boston-ma-usa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>

		<media:content url="http://herbsutter.files.wordpress.com/2008/10/bjarne-and-herb-for-ss-thumb.jpg" medium="image">
			<media:title type="html">Bjarne and Herb for S&#38;S</media:title>
		</media:content>
	</item>
		<item>
		<title>Data and Perspective</title>
		<link>http://herbsutter.wordpress.com/2008/09/30/data-and-perspective/</link>
		<comments>http://herbsutter.wordpress.com/2008/09/30/data-and-perspective/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 18:25:34 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Opinion & Editorial]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/09/30/data-and-perspective/</guid>
		<description><![CDATA[Even genuinely newsworthy topics can get distorted when commentators exaggerate or use data selectively. Here are two recent examples I noticed.
&#8220;This is the worst financial crisis since the Great Depression.&#8221; It&#8217;s true that it&#8217;s bad and even historic, and this sound bite correctly doesn&#8217;t actually claim it&#8217;s as bad as the Depression. I hope it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=137&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Even genuinely newsworthy topics can get distorted when commentators exaggerate or use data selectively. Here are two recent examples I noticed.</p>
<p><strong>&#8220;This is the worst financial crisis since the Great Depression.&#8221;</strong> It&#8217;s true that it&#8217;s bad and even historic, and this sound bite correctly doesn&#8217;t actually claim it&#8217;s as bad as the Depression. I hope it doesn&#8217;t turn out to be in the same league as that; then, people were lining up at soup kitchens. For now, however, Apple is still on track to sell 10 million iPhone 3Gs this year, which says something.</p>
<p><strong>&#8220;Yesterday [Monday, September 29, 2008] saw the worst single-day plunge in Dow Jones history.&#8221; &#8220;It&#8217;s a new Black Monday.&#8221; </strong>Well, these got my attention, because I remember <a href="http://en.wikipedia.org/wiki/Black_Monday_(1987)">Black Monday on October 19, 1987</a> very well. I was working in IT at a major bank, doing software application support for traders and related departments. When I went up to the trading floor that day, I immediately knew something was badly wrong because of the eerie sound as the elevator doors opened &#8212; a sound you never hear during trading hours, and certainly not from a room full of traders standing at their desks: silence.</p>
<p>Yesterday&#8217;s loss of 777 points was stunning as the largest single-day point loss in Dow history. But as a <em>percentage</em> loss that&#8217;s not even in the top 10 Bad Dow Days, all but two of which occurred before 1935. Those two since the Depression occurred on October 19 and 26, 1987, when the Dow lost <strong>22.6%</strong> and then another <strong>8% </strong>of its total value in single sessions, respectively #2 and #9 on All-Time Bad Dow Days list. For perspective, as of this writing the Dow is down 19.8% so far this entire year, and it surely hasn&#8217;t been a good year. Today&#8217;s crisis is already historic and could well get worse yet, of course, but some of us do remember some pretty bad ones in the past.</p>
<p>As good old Sam Clemens said (approximately), there are lies, darned lies, and statistics. Even when the statistics are true, always cross-check them for perspective. Even the best news and the worst news can be overstated, and viewing the same data from multiple angles helps ensure we understand it properly.</p>
<p>&nbsp;</p>
<p>[Edited 9/30 to add: At 22.6%, Black Monday in 1987 was actually the worst Dow Day ever if you don't count "reopening days" after unusual market closures when the markets catch up with events that happened while they were closed. So when was the all-time worst Dow Day ever? Perhaps surprisingly, the answer is not in 1929, though several of the all-time top 10 were in that year. Rather, it was December 12, 1914, when the Dow dropped 24.4% after the markets reopened after being closed entirely for over four months due to the outbreak of World War I. (The markets closed on July 30, two days after Austria-Hungary declared war and a day before Germany did.) That helps put in perspective just how bad October 1987 was, and of course that today's crisis is also pretty bad even if it hasn't beaten those prior records, yet.]</p>
Posted in Opinion &amp; Editorial  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=137&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/09/30/data-and-perspective/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Ralph Johnson on Parallel Programming Patterns</title>
		<link>http://herbsutter.wordpress.com/2008/09/25/ralph-johnson-on-parallel-programming-patterns/</link>
		<comments>http://herbsutter.wordpress.com/2008/09/25/ralph-johnson-on-parallel-programming-patterns/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 02:49:06 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/09/25/ralph-johnson-on-parallel-programming-patterns/</guid>
		<description><![CDATA[A few days ago at UIUC, Ralph Johnson gave a very nice talk on &#8220;Parallel Programming Patterns.&#8221; It&#8217;s now online, and here&#8217;s the abstract:
Parallel programming is hard. One proposed solution is to provide a standard set of patterns. Learning the patterns would help people to become expert parallel programmers. The patterns would provide a vocabulary [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=136&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A few days ago at UIUC, <a href="http://st-www.cs.uiuc.edu/users/johnson/">Ralph Johnson</a> gave a very nice talk on &#8220;Parallel Programming Patterns.&#8221; It&#8217;s <a href="http://media.cs.uiuc.edu/Apresos/seminars/UPCRC/2008-09-19/UPCRC__2008-09-19_02-58-PM_files/flash_index.htm">now online</a>, and here&#8217;s the abstract:</p>
<blockquote><p>Parallel programming is hard. One proposed solution is to provide a standard set of patterns. Learning the patterns would help people to become expert parallel programmers. The patterns would provide a vocabulary that would let programmers think about their programs at a higher level than the programming language. The patterns could steer programmers away from common errors and towards good design principles.
<p>There have been a number of papers about parallel patterns, and one book <em>Patterns for Parallel Programming</em>. None of them have become popular. I think the problem is that parallel programming is diverse and requires more design expertise than traditional software design. Thus, parallel programming experts use more patterns than parallel programming expert. I&#8217;ll critique the existing patterns and explain what I think should be done to make a set of patterns that can be as effective for parallel programming as patterns have been for object-oriented design. </p>
</blockquote>
<p>If Johnson&#8217;s name sounds familiar, it should: He&#8217;s one of the &#8220;Gang of Four&#8221; authors of the seminal book <em><a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612">Design Patterns</a>.</em></p>
<p>Recommended viewing.</p>
Posted in Concurrency  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/136/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=136&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/09/25/ralph-johnson-on-parallel-programming-patterns/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Concurrency Course: Sep 22-24, 2008</title>
		<link>http://herbsutter.wordpress.com/2008/09/01/effective-concurrency-course-sep-22-24-2008/</link>
		<comments>http://herbsutter.wordpress.com/2008/09/01/effective-concurrency-course-sep-22-24-2008/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 04:34:42 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Concurrency]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/09/01/effective-concurrency-course-sep-22-24-2008/</guid>
		<description><![CDATA[The first offering of the three-day Effective Concurrency course in May went very well. We&#8217;re doing it again later this month &#8212; this will be the last offering this year.
Here&#8217;s the brief information (more details below):
3-Day Seminar: Effective Concurrency
September 22-4, 2008Bellevue, WA, USADeveloped and taught by Herb Sutter
This course covers the fundamental tools that software [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=135&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The first offering of the three-day <em>Effective Concurrency</em> course in May went very well. <a href="http://construx.com/Page.aspx?nid=84&amp;id=108">We&#8217;re doing it again later this month</a> &#8212; this will be the last offering this year.</p>
<p>Here&#8217;s the brief information (more details below):</p>
<blockquote><h3><strong><font color="#000080"><a href="http://construx.com/Page.aspx?nid=84&amp;id=108">3-Day Seminar: Effective Concurrency</a></font></strong></h3>
<h4><font color="#000080">September 22-4, 2008<br />Bellevue, WA, USA<br />Developed and taught by Herb Sutter</font></h4>
<p><font color="#000080">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: </font>
<ul>
<li><font color="#000080">Leverage the ability to perform and manage work asynchronously </font>
<li><font color="#000080">Build applications that naturally run faster on new hardware having more and more cores </font>
<li><font color="#000080">Manage shared objects in memory effectively to avoid races and deadlocks</font>
<li><font color="#000080">Engineer specifically for high performance</font></li>
</ul>
<p><font color="#000080">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.</font> </p>
</blockquote>
<p>Here&#8217;s a summary of what we&#8217;ll cover during the three days:</p>
<blockquote><p><font color="#000080">Fundamentals </font>
<ul>
<li><font color="#000080">Define basic concurrency goals and requirements </font>
<li><font color="#000080">Understand applications&#8217; scalability needs </font>
<li><font color="#000080">Key concurrency patterns </font></li>
</ul>
<p><font color="#000080">Isolation: Keep Work Separate </font>
<ul>
<li><font color="#000080">Running tasks in isolation and communicate via async messages </font>
<li><font color="#000080">Integrating multiple messaging systems, including GUIs and sockets </font>
<li><font color="#000080">Building responsive applications using background workers </font>
<li><font color="#000080">Threads vs. thread pools </font></li>
</ul>
<p><font color="#000080">Scalability: Re-enable the Free Lunch </font>
<ul>
<li><font color="#000080">When and how to use more cores&nbsp; </font>
<li><font color="#000080">Exploiting parallelism in algorithms&nbsp; </font>
<li><font color="#000080">Exploiting parallelism in data structures&nbsp; </font>
<li><font color="#000080">Breaking the scalability barrier </font></li>
</ul>
<p><font color="#000080">Consistency: Don’t Corrupt Shared State </font>
<ul>
<li><font color="#000080">The many pitfalls of locks&#8211;deadlock, convoys, etc. </font>
<li><font color="#000080">Locking best practices </font>
<li><font color="#000080">Reducing the need for locking shared data </font>
<li><font color="#000080">Safe lock-free coding patterns </font>
<li><font color="#000080">Avoiding the pitfalls of general lock-free coding </font>
<li><font color="#000080">Races and race-related effects </font></li>
</ul>
<p><font color="#000080">Migrating Existing Code Bases to Use Concurrency </font>
<p><font color="#000080">Near-Future Tools and Features </font>
<p><font color="#000080">High Performance Concurrency </font>
<ul>
<li><font color="#000080">Machine architecture and concurrency </font>
<li><font color="#000080">Costs of fundamental operations, including locks, context switches, and system calls </font>
<li><font color="#000080">Memory and cache effects </font>
<li><font color="#000080">Data structures that support and undermine concurrency </font>
<li><font color="#000080">Enabling linear and superlinear scaling </font></li>
</ul>
</blockquote>
<p>I hope to get to meet some of you in the Seattle area!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/herbsutter.wordpress.com/135/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/herbsutter.wordpress.com/135/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=135&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/09/01/effective-concurrency-course-sep-22-24-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
		<item>
		<title>Anon on Data</title>
		<link>http://herbsutter.wordpress.com/2008/08/08/anon-on-data/</link>
		<comments>http://herbsutter.wordpress.com/2008/08/08/anon-on-data/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 14:03:01 +0000</pubDate>
		<dc:creator>Herb Sutter</dc:creator>
				<category><![CDATA[Friday Thoughts]]></category>

		<guid isPermaLink="false">http://herbsutter.wordpress.com/2008/08/08/anon-on-data/</guid>
		<description><![CDATA[The adage, quoted again this week by Bruce Schneier:
The plural of &#8220;anecdote&#8221; is not &#8220;data.&#8221;

But lest we enshrine raw data as holy in itself, another perspective:
And the plural of &#8220;datum&#8221; is not &#8220;proof.&#8221;

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=130&subd=herbsutter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The adage, <a href="http://www.schneier.com/blog/archives/2008/08/random_killing.html">quoted again this week</a> by Bruce Schneier:</p>
<blockquote><p>The plural of &#8220;anecdote&#8221; is not &#8220;data.&#8221;</p>
</blockquote>
<p>But lest we enshrine raw data as holy in itself, <a href="http://everything2.com/index.pl?node_id=163824">another perspective</a>:</p>
<blockquote><p>And the plural of &#8220;datum&#8221; is not &#8220;proof.&#8221;</p>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/herbsutter.wordpress.com/130/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/herbsutter.wordpress.com/130/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/herbsutter.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/herbsutter.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/herbsutter.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/herbsutter.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/herbsutter.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/herbsutter.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/herbsutter.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/herbsutter.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/herbsutter.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/herbsutter.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbsutter.wordpress.com&blog=3379246&post=130&subd=herbsutter&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://herbsutter.wordpress.com/2008/08/08/anon-on-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c0ba56bfd231f8f04feb057728975181?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Herb Sutter</media:title>
		</media:content>
	</item>
	</channel>
</rss>