Du kannst Wow auch 4 Kerne zuweisen, daß hat mit der Tatsache, daß Wow nur mit 2 Kernen skaliert nichts zu tun. Wow ist es scheißegal, ob eine anfallende Aufgabe nun auf Kern1, Kern2, Kern3 oder Kern4 ausgeführt wird. Wenn du lustig bist, kannst du auch auf 8 Kerne aufteilen, sofern du nen Octa-Core hättest. Unter der Tatsache, daß Wow maximal mit einen Dualcore skaliert versteht man etwas ganz anderes.
Einzelne Tasks auf verschiedene Kerne aufzuteilen, hat nichts mit Multithreading zu tun. Deswegen wird das ganze noch lange nicht asynchron verarbeitet, sondern weiterhin sequenziell, also eine Aufgabe nach der anderen. Die Zuteilung übernimmt der Scheduler.
Man kann sich jeden Kern wie eine Scheibe vorstellen. Die Scheibe wird durch die Anzahl der anfallenden Aufgaben unterteilt. Wobei nicht jeder Bereich gleich groß ist, denn die Prozesse haben unterschiedliche Priorität. Deswegen bekommen einige für längere Zeit die CPU zugewiesen als andere. Und nun dreht sich die Scheibe und für wenige Millisekunden bekommt jeder Prozess die CPU zugewiesen. Deswegen sieht es für den User aus, als ob der Rechner verschiedene Aufgaben parallel machen kann, kann er aber nicht, außer eben bei mehreren Kernen.
Das heißt also im Beispiel von Wow, das anfallende Rechenarbeiten nicht mehr solang warten müssen, weil wenn Kern1 gerade ausgelastet ist, dann hat man im Falle eines Dualcores noch einen weiteren.
Mit paralleler Verarbeitung hat das ganze aber trotzdem wenig zu tun. Denn wenn die Entwickler von Wow sagen, daß ihr Game nun auch mit Dualcore skaliert, dann meinen sie damit den Code.
Das hat mit der Zuteilung der Tasks auf verschiedene Kerne mittels Scheduler nicht direkt was zu tun.
Einfaches Beispiel:
Code:
class Program
{
static void Main(string[] args)
{
doSomething();
Console.Write("In der Main-Methode");
Console.ReadLine();
}
private static void doSomething()
{
Console.WriteLine("In der Methode doSomething");
}
}
Die Ausgabe "In der Main-Methode" erfolgt hier erst nach der Ausgabe "In der Methode doSomething". Den der Code in der Main läuft erst weiter, wenn die Logik in der Methode "doSomething"
abgearbeitet ist.
Anderst hier:
Code:
class Program
{
static void Main(string[] args)
{
ThreadStart ts = new ThreadStart(doSomething);
Thread th = new Thread(ts);
th.Start();
Console.WriteLine("In der Main-Methode");
Console.ReadLine();
}
private static void doSomething()
{
Console.WriteLine("In der Methode doSomething");
}
}
Die erste Ausgabe wird nun "In der Main-Methode" lauten. Obwohl noch vor der Ausgabe die Methode "doSomething" aufgerufen wird, jedoch in einen eigenen Thread.
Das heißt, die Main muss nicht auf deren Rückgabe warten sondern arbeitet direkt weiter. Hier stehen jetzt zwei Aufgaben an, die wirklich parallel verarbeitet werden können, sofern
du mehr Kerne hast. Denn pro Kern hat wie gesagt nur ein Prozess für wenige Millisekunden die CPU, bevor sich die Scheibe weiter dreht und der nächste Prozess dran ist.
Und genau das ist der Unterschied, zwischen blödsinnig irgendwelchen Prozessen Kerne zuweisen, was im Endeffekt nur Lastverteilung ist und sonst nichts, oder der Tatsache was es heißt, daß eine Anwendung tatsächlich mit Mehrkern-Prozzis skaliert. Und wenn Blizzard davon redet, daß ihr Wow jetzt auch etwas mit Dualcores skaliert, dann gehe ich doch davon aus, daß sie Änderungen im Code meinen.
Denn alles, wovon hier im Thread die Rede war, daß macht das Betriebsystem bzw. der Scheduler. Wow sagt "Hallo, hier gibts Arbeit", Scheduler sagt, du bekommst Kern3, 4 what ever, völlig Wurst.
In der Paxis und vor allem bei Win7 mit dem von mir schon erwähnten SMT-Parking ist es natürlich auch bei einen Quad nicht der Fall, daß wow ständig wo anders landet und das Betriebsystem ständig dabei ist, die Threads neu zu sortieren. Wow wird gestartet, Betriebsystem sagt, du nimmst mal 1 und 2 und dabei wird es dann auch belassen. Und je nach Auslastung bekommen halt dann weitere Programme zum Beispiel 3 und 4.
So, genug kluggeschissen. Wünsche guten Rutsch.