But again, you still need to be doing multiple events at the same time for threading to have any real impact. And very few work-heavy workloads can be easily broken up into smaller units running in parallel, because most jobs end up being a series of sequential events.
For example, when we first got quads, the thought was that you could write a game with the audio, rendering, physics, and AI engines each running on a different CPU. Sounds like a nice scheme, until you realise that the audio is almost totally dependent on the other three engines, and AI, physics, and rendering all interact with eachother in some fashon, which limits how much of their workloads can be done without needed some form of syncromization [which can take a VERY long time if one of those threads is pre-empted by the OS, in which case your application is basically stuck in a waiting state. Thankfully, Windows typically doesn't pre-empt high workload forground application threads...].
Farther, with more heavy workload threads running, you usually require a LOT more memory access at any one point in time, which, in 32-bit .exes or low memory systems, can result in a lot of paging, bringing HDD IO waits into the equation. [Moving to native 64-bit .exe's would help solve this problem though...]. You also need to put a LOT more thought on what the CPU decides to cache in the L2, which can have a huge impact on performance [especially if theres a lot of paging going on].
Point being, the "simple" scheme of stuffing each game engine on a different core got very complex very quickly. And HEAVEN FORBID your AV decides now is a good time to start on the 4th core, in which case you've just tanked you application performance. [Using more cores has the negative side effect of increasing the chances of a total application bottleneck if another application starts to execute on that same core, forcing you app to a waiting state. If your other threads are stuck in a syncronization state, you are basically dead].
And this is BEFORE we even begin to consider how the OS is actually managing all these resources.