Einzelnen Beitrag anzeigen

OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 25. Nov 2014, 18:39
Mit anderen Worten: Threads gibt es nicht umsonst.

Jedes Umschalten des Threads kostet Rechenzeit, weil innerhalb der CPU massenhaft Register ausgetauscht werden müssen (das sind BEI WEITEM nicht nur EAX, EBX und Konsorten !). So ein Umschalten, Kontextwechsel genannt, frißt so an die 1000-2000 Takte.

Bastelt man auf einem Quadcore nun 4 Threads, läuft auf jedem Core ein Thread. Die Anzahl der Kontextwechsel ist gleich null. Erstellt man 8 Threads, bürdet man jedem Kern 2000 Extra-Takte für einen Kontextwechsel auf. Und erstellt man 12000 Threads, dann eben 12000/4 = 3000 * 2000 = 6Mio. Takte NUR für Kontextwechsel.

Dir wird auffallen, das die verwaltung all dieser Threads und das Umschalten zwischen diesen irgendwann mehr Zeit verbraucht, als du durch die Threads einsparst. Als Faustregel kann man sagen: Jeder Thread > ANZ_CORES bringt nur noch 80% Gewinn.

Auf Singlecore-Maschinen also:

- 1 Thread = 1
- 2 Thread = 1 + 0.8 = 1.8 (und nicht 2.0)
- 3 Thread = 1 + 0.8 + 0.64 = 2.44 (und nicht 3.0)

usw.
  Mit Zitat antworten Zitat