Architecture Big Bets 2008-2009 – Part 2 – Parallel Processing
In his keynote for Tech.Ed 2008 in the US Bill Gates made a passing comment that chips aren’t going to be getting any faster any more. Moore’s Law is still working, but rather than processing power increasing linearly as it has until recently, chips will be adding cores instead. There are complex engineering reasons behind this that I don’t really understand but I do understand the implication of this on software development.
These implications are significant and ground-shifting for development, and therefore for architecture. In the past it has been possible to just write code and rely on computers to run that code faster as they get faster. Application not fast enough? Just run it on a faster machine.
Now things are significantly different. Designing applications that run efficiently in a multi-threaded, multi-CPU environment is non-trivial. What may be the most difficult aspect of all for many people though is that it is now necessary to think about how code is architected and written at a lower level. This is a big change for today’s developers who have not really had to be concerned with that in the past. Ironically, those of of that grew up with very slow computers may be the best placed to write code on newer machines as we know how to think about how code runs at the code level.
I believe that there is a link between this trend and the changes in user interface design that I talked about in Part 1 of this series. After all, HTML is not really going to make use of multi-threading is it? Applications that are developed intelligently to make the most use of client capabilities are going to be the best positioned to make use of parallel processing.
Of course Architects and Developers that are working on server applications will be impacted by this trend as well.
I encourage all Developers and Architects to think about design
and development in a parallel-processing environment and how the changes needed to do this fundamentally changes the way we build applications. This means being careful about the design and development of code within classes and components, not just between components.
Update: Note the changes planned for Windows 7 to support this requirement. Posted in Mary-Jo Foley’s blog: http://blogs.zdnet.com/microsoft/?p=1612
Links: