【问题标题】:Can XSLT processors be multi-threaded?XSLT 处理器可以是多线程的吗?
【发布时间】:2009-11-11 07:51:11
【问题描述】:

我正在寻找解决 XSLT 处理问题的方法。

是否可以使用并行处理来加速 XSLT 处理器?还是 XSLT 处理器本质上是串行的?

我的预感是 XML 可以被划分为可以由不同线程处理的块,但是由于我并没有真正找到任何关于这种壮举的文档,所以我对此表示怀疑。是否可以使用 StAX 同时分块 XML?

似乎大多数 XSLT 处理器都是用 Java 或 C/C++ 实现的,但我真的没有目标语言。我只是想知道多线程 XSLT 处理器是否可行。

你有什么想法?

【问题讨论】:

    标签: multithreading multicore stax xslt


    【解决方案1】:

    Saxon: Anatomy of an XSLT Processor,关于 XSLT 处理器的优秀文章,尤其是 saxon。它涵盖了多线程。

    顺便说一下,Saxon 可用于 .NET 和 Java,并且是可用的最佳处理器之一。

    【讨论】:

    【解决方案2】:

    与大多数编程语言一样,只要您遵循几条规则,循环本质上就是可并行化的,这就是所谓的数据并行化

    • 循环中的共享状态没有突变
    • 循环的一次迭代不能依赖于另一次迭代的结果

    任何循环结构都可以很容易地在 XSLT 中并行化。

    通过针对突变和依赖项的类似规则,您确实可以在一种基于任务的并行性中并行化大部分 XSLT 转换。

    首先,将整个文档分割成任务,在 XSLT 命令和文本节点边界处分割;每个任务都应该根据它在文档中的位置(从上到下)分配一个顺序索引。

    接下来,将任务分散到不同的 XSLT 处理函数,每个函数在不同的线程上运行;这些处理器都需要使用相同的全局状态(变量、常量等)进行初始化。

    最后,一旦所有转换完成,控制线程应按索引顺序收集结果(转换后的字符串)并将它们组装到完成的文档中。

    【讨论】:

    • <xsl:param>xsl:variable 是不可变的。 XSLT 中是否还有其他可能是可变的?我想不出任何临时变化的东西。
    • 啊,是的,是的;我的 XSL 有点生锈了。所以 XSLT 应该是使用文档片段和循环并行实现并行的一个很好的目标。
    【解决方案3】:

    一个较晚的答案,对于通过搜索点击此线程的人。在提出这个问题时,XSLT 中的多线程在理论上是一种可能性,但实际上并未在任何生产 XSLT 处理器中实现。今天,多线程在 Saxon-EE 中“开箱即用”可用。一篇描述其工作原理的论文发表在 2015 年 XML 布拉格:见 http://www.saxonica.com/papers/xmlprague-2015mhk.pdf

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2021-11-02
      相关资源
      最近更新 更多