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
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
I realize I'm saying nothing new here. Joel Spolsky posted
about map/reduce and functional languages over two weeks ago. Chris Sells
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. :-)