Multi-threading
The increase in CPU clock-speeds has been stalled for the last few years, and with it per-CPU throughput. To get more work done in the same amount of time it's necessary to throw more processors at the problem. Multi-processor systems have been affordable since 1998, and technologies like HyperThreading and multi-core processors are bringing that power to desktop and laptop. But to exploit these advances software must be multi-threaded.
Writing multi-threaded software is not a trivial exercise. The benefts are huge, but done carelessly your software will be unstable and hard to debug.
Electric Magic has been developing multi-threaded software for more than fifteen years. We've implemented servers using both standard and custom protocols. But these protocols tend to be stateless, or maintain state on a per-connection basis, and thus are relatively easy to farm out to multiple CPUs. The client side is another matter. There we have developed a range of patterns, techniques and code that smoothly integrates multi-threading and generally asynchronous functionality with the fundamentally synchronous world of event-driven user interfaces.