Musings about concurrency and manycore CPUs

Wow.  Larry O'Brien posted his blog's Technorati rank today and I was quite surprised that his blog is not more popular than it is.  Obviously a lot of people are missing out on a blog that has become one of my favorites.  I've only been reading Larry's blog for a few months, but he seems like one of those rare folks who really understand both technology and business at a deep level.

Several of his recent posts have been on the topic of concurrency and the manycore era.  He's really got me thinking lately about how big of a paradigm shift we're going to see over the next decade.  Single-core CPUs have been getting faster for so long that we just take it for granted.  Larry's right.  There is a huge impedance mismatch between tomorrow's manycore CPU and today's mainstream programming languages, operating systems and tools.  Not too far in the future, people are going to order a Dell and get a machine with a 16-core CPU.  Most of us are writing code that will only utilize 1/16th of that chip.  Most of us don't know how to write software that can effectively utilize 16 cores.

I've also been seeing a bunch of recent blog posts about Erlang, the tagline for which should be "When people create a new programming language to implement a really great new idea, why can't they use a C-style syntax?"  :-)

Seriously, Erlang's notion of concurrency is so simple and yet so smart.  Critical sections and locks and mutexes and synchronization are really, really hard.  Erlang eliminates all that crapola by simply prohibiting threads from sharing memory.  The only way two threads can communicate is by sending messages to each other, with copy semantics applied to any data in the message.  (Erlang's term for a thread is a "process", implying that it's much heavier than a thread when in fact the exact opposite is true.  Erlang's processes are actually very, very lightweight threads.)

I realize I'm saying nothing new here.  Joel Spolsky posted his rant about map/reduce and functional languages over two weeks ago.  Chris Sells posted his version of this blog entry back in December 2004.  Erlang was invented 19 years ago.

But the fact is that there is still time to prepare for the many opportunities that are coming in the manycore era.  I bet some of those opportunities are going to be worth a lot of money to somebody.

I normally discourage entrepreneurs from placing bets on major industry changes.  The desire to work on things that are innovative and revolutionary arises from an unrealistic and glamorized concept of entrepreneurship.  The next wave is exciting, but there is plenty of money on the current wave.  In fact, there's a shocking amount of money to be made still working on the previous wave.

But for me, this particular paradigm shift inspires confidence.  So, to all you would-be entrepreneurs who are always wanting to ride the next wave, start thinking about how mainstream programmers are going to create apps which effectively use CPUs with lots of cores.

And start reading Larry O'Brien's blog:-)