As I talk to other developers at Launch Events, user groups, and online, I am met with confusion when I talk about my concurrency experiments. I get the feeling that this is looked at as some sort of Ivory Tower academic exercise, or even worse some ridiculous nonsense concocted to try to look intelligent. Concurrency is important, and everyone should be thinking about it.
At the risk of sounding like a broken record, I’ll deliver my spiel again in a different way.
The silicon industry has presented us with terrible Bait ‘n Switch. For more than 12 years (in my case anyway) I had the option to buy more megahertz and gigahertz at least once per year, oftentimes more. Office is slow? No worries, it’ll perform great as computers are upgraded. Bioshock brings your system to its knees? Just get a new processor and a new GPU and you’ll be rockin’ 60fps with Big Daddy. Due to some lame excuse commonly called “The Laws of Physics” we’re not getting faster and faster CPUs anymore. Moore’s law is not dead yet: we’re getting more transistors all right. The problem is that these transistors are on two or more cores instead of one core, and a quad core 2.5ghz processor is not remotely the same animal as a 10ghz processor. I do half expect the silicon industry to pull a Cheap Stereo marketing trick any day now. Go to best buy and look through the home theater in a box section. You’ll see claims of “525 watt system!!” and so forth. These are not 525 watts per channel systems (that would be a lot) but 525 watts total, for 7 channels, which is not the same level of performance. When I next buy a CPU, I expect some branding telling me “This is a 20 GIGAHERTZ POWREHOUSE”. Lacking a 10 GHz processor (longing sigh), however, the multi-core CPU is the consolation prize offered to us by the silicon industry.
Despite being stuck in the 2-3ghz limbo, software is still increasing in complexity. People want responsive applications. It is my opinion that we are currently preparing to exit a time of “Free Concurrency Improvement”. I wish I had a more compelling name for this sweet plateau, so let me explain. Modern operating systems happen to be very good at task scheduling. If I run Visual Studio 2008, SQL Server 2005 Studio, Outlook, MSN messanger, and Zune player at the same time, my machine may not be very responsive. Moving from a single-core 2.4ghz processor to dual core 2.4ghz processor will make my machine more responsive. Running JUST the Zune player, for example, is probably not any faster than it used to be. Our Free Improvement here is that the Unit of Concurrency is the Windows Process, and Windows is good at putting Process A on one core and Process B on the other core where they can both get more horsepower.
We are approaching a time, however, where 2.4ghz will not run a “mostly single threaded” application in an acceptable fashion even if the application gets a 2.4ghz core all to itself. We need to stop thinking about concurrency as something that will keep Winamp from skipping when I open Visual Studio and start thinking about the next level of concurrency : running my ONE application as fast as possible by doing chunks of work concurrently on many cores. This requires developers to re-think application design. I did no threading in my computer science degree. The next generation of Computer Science graduates needs to be comfortable with concurrency before leaving college.
10 gigahertz processors sure would be nice though. 10 gigahertz Quad Core. Core 10 Quad, there, I branded it for you. Intel, AMD, anyone listening?