AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Gibt es von TParallel.for auch sowas wie TParallel.ForIn?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es von TParallel.for auch sowas wie TParallel.ForIn?

Ein Thema von Mokus · begonnen am 17. Mai 2017 · letzter Beitrag vom 17. Mai 2017
 
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.756 Beiträge
 
Delphi 12 Athens
 
#5

AW: Gibt es von TParallel.for auch sowas wie TParallel.ForIn?

  Alt 17. Mai 2017, 10:06
Das gibt es nicht und das hat auch seinen Grund: Das for..in verwendet einen Iterator, der explizit oder implizit von der zu iterierenden Menge geliefert wird. Iteratoren stellen ein MoveNext und ein GetCurrent zur Verfügung, das innerhalb der Schleife verwendet wird. Die meisten (wenn nicht sogar alle) Iteratoren verwenden einen internen State um diese Funktionalität zu implementieren. Das ist im einfachsten Fall der Index in einem Array, mit dem das GetCurrent realisiert wird und der beim MoveNext erhöht wird. Die Tatsache, daß man die Gesamtanzahl der Iterationen nicht im Voraus kennt, ist auch nicht gerade hilfreich.

Wollte man diese Iteration nun parallelisieren, würde das mit dieser Form des Iterators natürlich nicht gehen. Man müsste also erstmal eine Reihe von Iterationen (genauer Stride * ThreadCount) ausführen und die jeweiligen GetCurrent-Werte zwischenspeichern. Das kann je nach Anwendungsfall schon mal recht aufwändig werden. Das setzt allerdings voraus, daß sich diese Werte wirklich sauber zwischenspeichern lassen. Eine Iteration z.B. über ein DataSet, bei dem der aktuelle Datensatz in der Schleife verändert wird, fällt offensichtlich schon mal als Anwendungsfall heraus - von der fehlenden Multithread-Eignung eines TDataSet ganz zu schweigen.

Es ist schon schwierig genug, eine simple Schleife sauber zu parallelisieren. Kommt dann noch eine womöglich unbekannte Implementation eines Iterators dazu, würde ich vermutlich erstmal die Finger davon lassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz