So they look for routines that are a sizeable portion of the processor load, but which have small data-sharing requirements, and make sense to happen asynchronously. single core) where a seperate thread doesn't buy you anything. It can be quite a bit of processing overhead, and then there is the complication of making it skip all that overhead in cases (e.g.
Not just in the re-located code, but everywhere those data structures are used. Those are pretty simple to coordinate - stick some data in a queue and let the other thread to do it's thing.Įach bit of work you move to a seperate thread means adding coordination for each piece of data thats shared between threads - locks on each shared data structure, code to make private copies of data, or to check locks, lock data, unlock data, wait for a lock to be freed etc. but the work on those threads is a small percentage of the total. There are probably seperate threads to handle network comms, chat, voice chat, maybe the 2d UI overlay etc. The problem is that 90% of the work is done in one thread - and only one processor can work on one thread. You don't need vista or w7 for an application to assign threads to processors - they can do that fine with NT and XP too.
Last fall they moved some animation processing to a seperate thread - thats most of the 5-20% you see on your second core.