Können XSLT-Prozessoren multi-threaded sein?

8

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?

    
Ben Simmons 11.11.2009, 07:51
quelle

3 Antworten

5

Wie bei den meisten Programmiersprachen ist die Schleifenbildung in sich parallelisierbar, solange Sie ein paar Regeln befolgen, dies wird als Datenparallelität bezeichnet.

  • Keine Änderung des gemeinsamen Status in der Schleife
  • Eine Iteration der Schleife kann nicht vom Ergebnis einer anderen Iteration abhängen

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.

    
joshperry 11.11.2009, 08:17
quelle
6

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.

    
Peter Lindqvist 11.11.2009 10:19
quelle
1

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 Ссылка

    
Michael Kay 24.04.2017 09:29
quelle