Image via Wikipedia This semester, I’m taking a great, gothy stab at
concurrency. My boss has been suggesting that I look into it so that he can re-evaluate some of our systems at work and how well they can and how well they could make the most of
multi-core computers.
I can’t read an article, a blogpost or a web page about concurrency without seeing the main reason it is now such a hot topic. Processors are becoming seriously multi-core, and I don’t just mean dual or quad core.
This article was
posted to Slashdot yesterday and hints at the massively concurrent processors (how ‘bout 200,000) to come.
Think it’s an issue now? Yeah, it is.
Here’s
Wikipedia on concurrency:
In
computer science, concurrency is a property of systems in which several computational processes are executing at the same time, and potentially interacting with each other.The study of concurrency encompasses a broad range of systems, from tightly-coupled, largely synchronous parallel computing systems, to loosely-coupled, largely asynchronous
distributed systems... Because the processes in a concurrent system can interact with each other while they are executing, the number of possible execution paths in the system can be extremely large, and the resulting behavior can be very complex. (referenced from Roscoe, A. W. (1997). The Theory and Practice of Concurrency. Prentice Hall. ISBN 0-13-674409-5).
As part of my concurrency investigation, I’m learning about
Erlang. This is a
functional programming language, in the same family as lisp or Haskell, and x = 2 is not at all the same as a C++ or Java x = 2. I was looking for an opportunity to learn one of these anyway, so…yippee.
THE book about Erlang, Programming Erlang: Software for a Concurrent World has a few chapters on syntax and then goes straight to writing servers and other distributed stuff.
Absolutely not to be missed is the 10 minute retro classic
Erlang: The Movie It has 80's hair, 80's computers and the BIG 80's glasses.
I'll look at some of the concurrency videos and see if there are any that I really think are great.
Over the summer, I did a lot of thrashing on my naive Bayesian Classifier because I was taking an algorithm in python and re-coding it in java. Erlang, although different from Python shares the characteristic of allowing the user to accomplish a lot with one line of code. I'm now thinking of taking a different application I wrote in java and re-coding it in Erlang to see what falls out in terms of design differences.