2009-11-11 4 views
8

Je suis à la recherche d'approches pour un problème avec le traitement XSLT.Les processeurs XSLT peuvent-ils être multithread?

Est-il possible d'utiliser le traitement parallèle pour accélérer un processeur XSLT? Ou les processeurs XSLT sont-ils intrinsèquement en série? Mon intuition est que XML peut être partitionné en morceaux qui pourraient être traités par différents threads, mais comme je ne trouve pas vraiment de documentation sur un tel exploit, je deviens sceptique. Est-il possible d'utiliser StAX pour compiler simultanément XML?

Il semble que la plupart des processeurs XSLT sont implémentés en Java ou en C/C++, mais je n'ai vraiment pas de langage cible. Je veux juste savoir si un processeur XSLT multi-thread est concevable.

Que pensez-vous?

Répondre

5

Comme la plupart des langages de programmation en boucle est intrinsèquement parallélisables aussi longtemps que vous suivez les règles de couple, ce qui est connu comme données Parallélisme

  • Aucune mutation de l'état partagé dans la boucle
  • Une itération de la boucle ne peut pas dépend du résultat d'une autre itération

Toute construction en boucle pourrait être parallélisée dans XSLT assez facilement.

Avec des règles similaires contre la mutation et les dépendances, vous pourriez vraiment paralléliser la plupart d'une transformation XSLT dans une sorte de parallélisme basé sur les tâches. Tout d'abord, fragmentez le document entier en tâches, segmentées à la commande XSLT et aux limites des nœuds de texte; chaque tâche devrait recevoir un index séquentiel en fonction de sa position dans le document (de haut en bas).

Ensuite, répartissez les tâches sur des fonctions de traitement XSLT distinctes s'exécutant chacune sur des threads différents; ces processeurs devront tous être initialisés avec le même état global (variables, constantes, etc ...).

Enfin, une fois toutes les transformations terminées, le thread de contrôle doit rassembler les résultats (chaînes transformées) dans l'ordre de l'index et les assembler dans le document fini.

+1

'' et 'xsl: variable' sont immuables. Y a-t-il autre chose dans XSLT qui pourrait être mutable? Je ne peux pas penser à quelque chose de mutable de la main. – ndim

+0

ah oui, c'est vrai; mon XSL est un peu rouillé. Donc XSLT devrait être une bonne cible pour le parallélisme en utilisant des fragments de document et le parallélisme de boucle. – joshperry

6

Saxon: Anatomy of an XSLT Processor, excellent article sur les processeurs XSLT, en particulier le saxon. Il couvre le multithreading. Saxon est d'ailleurs disponible à la fois pour .NET et Java et est l'un des meilleurs processeurs disponibles.

1

Une réponse tardive, pour les personnes qui touchent ce fil à la suite d'une recherche. Au moment où cette question a été posée, multithreading dans XSLT était une possibilité théorique, mais n'a pas été réellement réalisé dans tous les processeurs XSLT de production. Aujourd'hui multithreading est disponible "out-of-the-box" dans Saxon-EE. Un article décrivant comment cela fonctionne a été publié à XML Prague 2015: voir http://www.saxonica.com/papers/xmlprague-2015mhk.pdf

Questions connexes