The CPU architecture landscape has changed, multiple cores is a trend that will change how we have to develop software. I've done multi-threaded development in C, C++ and Java, I've done multi-process development using various IPC mechanisms. Traditional approaches to using threads doesn't seem to make it easy, for the developer, to utilize hardware that supports a high degree of concurrency.
What languages, libraries and development techniques are you aware of that help alleviate the traditional challenges of creating concurrent applications? I'm obviously thinking of issues like deadlocks and race conditions - but I'm also interested in design techniques, libraries, tools, etc that help actually take advantage of and ensure that the available resources are being utilized - just writing a safe, robust threaded application doesn't ensure that it's using all the available cores.
What I've seen so far is:
- Erlang: process based, message passing IPC, the 'actor's model of concurrnecy
- Dramatis: actors model library for Ruby and Python
- Scala: functional programming language for the JVM with some added concurrency support
- Clojure: functional programming language for the JVM with an actors library
- Termite: a port of Erlang's process approach and message passing to Scheme
What else do you know about, what has worked for you and what do you think is interesting to watch?