Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
20. Nov 2014
Nun ja, man konnte ja seit geraumer Zeit schon einen anonymen Thread erstellen, allerdings ist das etwas völlig anderes als das mit den Tasks.
Dort macht man jetzt genau das, was man eigentlich möchte: Eine Aufgabe erstellen, die in einem anderen Thread-Kontext ausgeführt werden soll :)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Nov 2014
Nun mit der normalen Variante hat er bei einem Bild 2ms benötigt. Mit der parallelen war das schon nach 39ms vollbracht :mrgreen:
Es bringt also nur etwas, wenn man die Bilder in separate Einzelbilder unterteilt und dieses Teilbild dann in einem Task abarbeitet. Dabei sollte das Teilbild nicht zu klein sein, sonst macht es keinen Sinn.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Nov 2014
@Harry Stahl
Schau dir mal an, was TBitmap.Scanline eigentlich macht, dann sieht man auch, warum das der Zugriff per Pixel so langsam ist und der Zugriff per Scanline schneller (aber eben nur dann, wenn man immer Zeile für Zeile abarbeitet). ;)
Wenn du das parallelsieren möchtest, dann musst du für jeden Task ein eigenes Bitmap zur Verfügung stellen.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Nov 2014
Es sind eben nicht insgesamt viele, es sind und bleiben eine Handvoll Threads, die, wenn einmal erzeugt, bis zum Ende des ThreadPools aktiv/schlafend bleiben. Diese Threads holen sich einfach die nächste Aufgabe, verarbeiten die und es geht wieder von vorne los. Da ist kaum ein Unterschied, ob ich jetzt eine Aufgabe mit 10 Einzelschritten oder 10 Aufgaben mit jeweils 1 Einzelschritt übergebe.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Nov 2014
@himitsu
Das Argument "viele Threads" stimmt nicht, es sind "viele Aufgaben" die mit einem ThreadPool abgearbeitet werden. Da dürften nach einer gewissen "Warmlaufphase" nur eine Handvoll Threads aktiv sein.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Nov 2014
Nun überleg doch mal, wofür man das L benutzen könnte, wenn man mal unterstellt, dass Ziel und Quelle ein Array ist (ist es).
Und gleichzeitig frage dich, ob es gut ist, wenn man bei einer parallelen Bearbeitung überall den Bezugspunkt einfach so verschiebt Inc(Ziel); Inc(Quelle);.
Das kann man fast vergleichen mit "Wenn ein Ei 5 Minuten gekocht werden muss, wie lange müssen dann 10 Eier...