Multithreading is not a stop-gap measure
Christopher, have you ever written a kernel?
Just a simple one, mind you. I have, and I honestly think that every programmer worth his salt should do the same. It's as easy as making a call and swapping some registers. Voilà, cooperative task switching. Now apply that in a non-threaded OS, and you have threads. Did you know that the Modula-2 language has threading built into it? Radical stuff for the late 1970's.
And here it is about 30 years later. Where is multithreading today? Essentially no place at all. The "in" thing is to tout that a language threads by itself, or to put "easy-to-use" functionality into a development studio, like Sun Studio, for Solaris and Linux. How much real multithreading do we see in Windows? Not a lot.
The software is behind the hardware because its developers are behind the state of the art 20 years ago. I recently spoke with a few fellows with freshly-minted BS in CS. Design is not taught. HELLO!!! Any educators out there? I don't care that some prof thinks that Java is the next incarnation of Buddha and Mohamed and Jesus Christ all rolled into one. A language is not design, it is a tool used to accomplish a solution! There is no magic bullet to get around the task of creating good software.
Design is fundamental, and too many loose sight of that far to easily.