9
votes

Les processeurs XSLT peuvent-ils être multi-filetés?

Je pêche pour des approches sur un problème avec le traitement XSLT.

est-il possible d'utiliser un traitement parallèle pour accélérer un processeur XSLT? Ou sont des processeurs XSLT intrinsèquement en série?

My Hunch est que XML peut être partitionné en morceaux qui pourraient être traités par différents threads, mais que je ne trouve pas vraiment de documentation d'un tel feat, je suis sceptique. Il est possible d'utiliser STAX pour un chunk simultanément XML?

Il semble que la plupart des processeurs XSLT soient mis en œuvre dans Java ou C / C ++, mais je n'ai vraiment pas de langue cible. Je veux juste savoir si un processeur XSLT multi-threads est concevable.

Quelles sont vos pensées?


0 commentaires

3 Réponses :


5
votes

Comme la plupart des langages de programmation La boucle est intrinsèquement parallélizable tant que vous suivez quelques règles, il est connu sous le nom de parallélisme de données

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

    Toutes les constructions de boucle pourraient être parallélisées dans XSLT assez facilement.

    avec des règles similaires contre la mutation et les dépendances que vous pourriez vraiment paralléliser la majeure partie d'une transformation XSLT dans une sorte de parallélisme basé sur la tâche.

    Premièrement, fragmentez le document entièrement dans les tâches, segmenté sur les limites de la commande XSLT et du noeud de texte; Chaque tâche doit être attribuée à un indice séquentiel en fonction de sa position dans le document (haut en bas).

    Ensuite, sparpez les tâches à des fonctions de traitement XSLT distinctes qui fonctionnent chacune sur différents threads; Ces processeurs devront tous être initialisés avec le même état global (variables, constantes, etc.).

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


2 commentaires

et xsl: variable est immuable. Y a-t-il autre chose dans XSLT qui pourrait être mutable? Je ne peux penser à rien d'épargnant mutable.


ah oui, vrai; Mon XSL est un peu rouillé. Donc, XSLT devrait être une bonne cible pour le parallélisme à l'aide de fragments de document et de parallélisme de boucle.



6
votes

Saxon: anatomie d'un processeur XSLT , excellent article sur les processeurs XSLT , Saxon en particulier. Il couvre la multithreading.

Saxon à la manière est disponible pour .NET et Java et est l'un des meilleurs processeurs disponibles.


1 commentaires

IBM a tristement a purgé tout l'ancien matériel utile de son site de développementworks, mais il y a une copie archivée à web.archive.org/web/20200914190756/http://www.ibm.com/...



5
votes

Une réponse tardive, pour les personnes qui ont frappé ce fil à la suite d'une recherche. Au moment où cette question a été posée, la multiplication de XSLT était une possibilité théorique mais n'a pas été réalisée dans aucun processeur XSLT de production. Aujourd'hui, la multithreading est disponible dans la case "hors de la boîte" dans saxon-ee. Un article décrivant comment ces travaux ont été publiés à XML Prague 2015: voir http: //www.saxonica .com / papiers / xmlprague-2015mhk.pdf


0 commentaires