Ich habe einen Pentium Core i5 Prozessor, der 4 Kerne hat. Wenn ich das in einem C # -Konsolenprogramm mache
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
Laufen T1- und T2-Threads garantiert auf separaten Kernen?
t1
undt2
zu unterschiedlichen Zeiten in einer beliebigen Reihenfolge ausgeführt (zB ist es möglicht2
beginnt , bevort1
in einigen Modellen).Antworten:
Sie können in .Net nicht garantieren, dass zwei
Thread
auf zwei separaten Kernen ausgeführt werden. Tatsächlich können Sie auch nicht garantieren, dass manThread
nur auf einem Kern (!) Läuft .Dies liegt daran, dass verwaltete Threads nicht mit Betriebssystem-Threads identisch sind. Ein einzelner verwalteter Thread verwendet möglicherweise mehrere Betriebssystem-Threads, um dies zu unterstützen. In C # arbeiten Sie immer nur direkt mit verwalteten
Thread
s (zumindest ohne auf p / invoke zurückzugreifen, um die WinAPI-Threading-Funktionen aufzurufen, was Sie niemals tun sollten) .Die .Net- und Windows-Thread-Scheduler sind jedoch sehr gut darin - sie würden nicht zwei Threads auf einem einzigen Kern ausführen, während ein zweiter Kern vollständig inaktiv ist. Im Allgemeinen brauchen Sie sich also keine Sorgen zu machen.
quelle
Thread
s sind OS - Threads. Es gibt jedoch keine Garantie dafür, dass ein einzelner Thread immer auf demselben Kern ausgeführt wird.async
Schlüsselwort (wovon Sie wahrscheinlich sprechen, da "asynchrone Threads" überflüssig sind) ist nur syntaktischer Zucker für die Verwendung einesBackgroundWorker
Threads, der wie jeder andere .Net-Thread ist. Sie können nicht garantieren, dass er auf einem ausgeführt wird separater Kern oder nicht.Nein, das Betriebssystem und die CPU entscheiden, was und wann ausgeführt wird. In dem einfachen Beispiel, das Sie gezeigt haben, werden diese Aufgaben unter Ausschluss anderer Aufgaben höchstwahrscheinlich auf separaten Kernen parallel ausgeführt, aber es gibt selten eine Garantie dafür, dass dies der Fall ist.
Mithilfe der Thread-Affinität können Sie versuchen, die Zuordnung eines Kerns zu einem bestimmten Thread zu steuern.
Zusätzlich berücksichtigen Prioritäten Scheduling sollte die Plattform in Bezug auf deren Gewinde vollständig parallel zu stapeln, und welche warten.
quelle