<p>If you were writing a new application from scratch today, and wanted it to scale to all the cores you could throw at it tomorrow, what parallel programming model/system/language/library would you choose?  Why?</p>

<p>I am particularly interested in answers along these axes:</p>

<ol>
<li>Programmer productivity / ease of use (can mortals successfully use it?)</li>
<li>Target application domain (what problems is it (not) good at?)</li>
<li>Concurrency style (does it support tasks, pipelines, data parallelism, messages...?)
<li>Maintainability / future-proofing (will anybody still be using it in 20 years?)</li>
<li>Performance (how does it scale on what kinds of hardware?)</li>
</ol>

<p>I am being deliberately vague on the nature of the application in anticipation of getting good general answers useful for a variety of applications.</p>

For .NET application I choose "
.NET Parallel Extensions (PLINQ)
" it's extremely easy to use and allows me to parallelize existing code in minutes.
It's simple to learn
Used to perform complex operations over large arrays of objects, so I can't comment on other applications
Supports tasks and piplines
Should be supported for a next couple of years, but who knows for sure?
CTP version has some performance issues, but already looks very promising.
Mono
will likely get
support for PLINQ, so it could be a cross-platform solution as well.