Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#4

AW: TParallel.for innerhalb iTask

  Alt 13. Aug 2019, 08:45
...wenn zu schnell versucht wird, die Tasks aufzurufen bevor die Arbeit gemacht ist, dann kommen immer mehr Threads dazu...
Eigentlich schreibst du doch genau in diesem Satz, was das Problem ist.
Wieso verhinderst du nicht, das neue Threads gestartet werden, wenn noch andere laufen bzw. die mit ihrer Arbeit noch nicht fertig sind?

Ist ja logisch, das sich das dann gegenseitig immer mehr aufbaut (stark vereinfacht):

Thread 1 gestartet
Prozessoren bearbeiten 1 Thread
Thread 1 noch nicht fertig, aber nächster wird gestartet.
Prozessoren bearbeiten 2 Threads
Thread 1 und 2 noch nicht fertig, aber nächster wird gestartet.
Prozessoren bearbeiten 3 Threads
...

ggf. wird zwischendurch mal ein Thread fertig aber wenn der 1. Thread schon nicht fertig wird, bevor der zweite startet, wie sollen zwei Threads da fertig werden bevor der dritte startet usw.?

Richtig wäre:

...
Thread 1 gestartet
Prozessoren bearbeiten 1 Thread
Ein neuer Thread soll gestartet werden aber Thread 1 noch nicht fertig, daher noch keinen weiteren starten.
Prozessoren bearbeiten 1 Thread
Thread 1 fertig, nun kann der nächste gestartet werden.
Prozessoren bearbeiten 1 Thread
...
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Aug 2019 um 08:48 Uhr)
  Mit Zitat antworten Zitat