Last week we upgraded the office VMware server. It's now running an Intel Core2 quad CPU with 8GB RAM. I can't believe how much the price of hardware has fallen. This replaces a 5 year old dual CPU Athlon 2100. The performance leap is HUGE.
Which then got me thinking. The trend is to add more and more cores to CPUs, which is great so long as the software that runs on it is multithreaded. Sure you'll get a good boost by running multiple applications, but what about web applications? Yes, two incoming web requests run in their own threads and there is a certain amount of parallelization (is that a word?) within that request, but at some point the web server will run your custom code which does the actual work. How well does that cater for a parallel approach. My guess is in most cases, not at all. Here we have a bottle neck. Add 100 more cores and your code will go no faster.
Ok, so just make it multithreaded?
Well, not so fast. This is a difficult LOGICAL problem. Consider you are writing a lump of code to dress a person. Can you put shoes and socks on at the same time? Do trousers come before or after shoes? For most tasks there is a sequential order. It is a difficult task to determine which tasks can be run in parallel and which are sequential and usually there is a combination of both task types.
As programmers we are on the cusp of having to change the way we think about problems and probably use some new tools to get that work done.