A few weeks back I recorded a discussion with the infamous Erik Meijer and Charles from Channel9.
Perspectives on Concurrent Programming and Parallelism
http://channel9.msdn.com/shows/Going+Deep/Joe-Duffy-Perspectives-on-Concurrent-Programming-and-Parallelism/
In it, I show my cards a bit more than intuition says I should. I'm not good at poker.
To summarize:
- Mostly functional (purity + immutability) is a great default.
- Safe, determinstic mutability (a la runST) is a must-have for cognitive familiarity.
- Isolation is key to achieve the former; type systems can help (a lot).
- Actors, agents, forkIO, <what have you> is a good model, but not the only one. Isolation is (far) more general.
- Transactions can help around the edges.
I'm working on a few papers for public consumption this year where I espouse these ideas. Keep watching for more detail.