Ich suche nach Lösungsansätzen für ein Problem mit der XSLT-Verarbeitung.
Ist es möglich, eine Parallelverarbeitung zu verwenden, um einen XSLT-Prozessor zu beschleunigen? Oder sind XSLT-Prozessoren inhärent seriell?
Meine Vermutung ist, dass XML in Stücke aufgeteilt werden kann, die von verschiedenen Threads verarbeitet werden könnten, aber da ich keine Dokumentation über solch ein Kunststück finde, werde ich skeptisch. Es ist möglich, StAX zum gleichzeitigen Teilen von XML zu verwenden?
Es scheint, dass die meisten XSLT-Prozessoren in Java oder C / C ++ implementiert sind, aber ich habe wirklich keine Zielsprache. Ich möchte nur wissen, ob ein Multi-Thread-XSLT-Prozessor denkbar ist.
Was sind deine Gedanken?
Wie bei den meisten Programmiersprachen ist die Schleifenbildung in sich parallelisierbar, solange Sie ein paar Regeln befolgen, dies wird als Datenparallelität bezeichnet.
Alle Schleifenkonstrukte können in XSLT ziemlich einfach parallelisiert werden.
Mit ähnlichen Regeln gegen Mutation und Abhängigkeiten könnten Sie den größten Teil einer XSLT-Transformation in einer Art aufgabenbasierter Parallelität parallelisieren.
Teilen Sie zuerst das gesamte Dokument in Aufgaben auf, die an XSLT-Befehls- und Textknotengrenzen segmentiert sind. Jeder Aufgabe sollte ein sequenzieller Index entsprechend ihrer Position im Dokument (von oben nach unten) zugewiesen werden.
Als Nächstes streuen Sie die Aufgaben auf bestimmte XSLT-Verarbeitungsfunktionen, die jeweils auf verschiedenen Threads ausgeführt werden. Diese Prozessoren müssen alle mit demselben globalen Status (Variablen, Konstanten usw.) initialisiert werden.
Schließlich, sobald alle Transformationen abgeschlossen sind, sollte der steuernde Thread die Ergebnisse (transformierte Strings) in Indexreihenfolge sammeln und sie zum fertigen Dokument zusammenstellen.
Saxon: Anatomie eines XSLT-Prozessors , ausgezeichneter Artikel über XSLT-Prozessoren, insbesondere Saxon. Es behandelt Multithreading.
Saxon ist übrigens sowohl für .NET als auch für Java verfügbar und ist einer der besten verfügbaren Prozessoren.
Eine späte Antwort für Leute, die diesen Thread als Ergebnis einer Suche getroffen haben. Zu der Zeit, als diese Frage gestellt wurde, war Multithreading in XSLT eine theoretische Möglichkeit, wurde aber in keinem Produktions-XSLT-Prozessor tatsächlich realisiert. Heute ist Multithreading "out-of-the-box" in Saxon-EE verfügbar. Ein Artikel, der beschreibt, wie das funktioniert, wurde auf der XML Prague 2015 veröffentlicht: siehe Ссылка
Tags und Links multithreading xslt multicore stax