2009-11-11 46 views
8

我正在寻找解决XSLT处理问题的方法。XSLT处理器可以是多线程的吗?

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

我的预感是XML可以被分割成可以被不同线程处理的块,但由于我没有真正找到任何有关这种壮举的文档,我开始怀疑。有可能使用StAX来并发块XML?

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

你有什么想法?

回答

5

最喜欢的编程语言循环长达固有并行你按照一对夫妇的规则,这被称为数据并行

  • 共享状态没有突变的循环
  • 一个循环的迭代不能取决于另一次迭代的结果

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

对于变异和依赖关系类似的规则,你真的可以在一种基于任务的并行性中平行化大部分XSLT转换。首先,将文档整体分割成任务,在XSLT命令和文本节点边界处分割;应根据文档在文档中的位置(从上到下)为每个任务分配一个顺序索引。

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

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

+1

''和'xsl:variable'是不可变的。 XSLT中还有什么可以改变的吗?我想不出任何可变的副手。 – ndim 2009-11-11 08:22:36

+0

啊是的,真的;我的XSL有点生疏。因此,使用文档片段和循环并行性,XSLT应该成为并行性的一个很好的目标。 – joshperry 2009-11-11 14:24:39

6

Saxon: Anatomy of an XSLT Processor,关于XSLT处理器的杰出文章,特别是撒克逊处理器。它涵盖了多线程。

撒克逊顺便提供.NET和Java,是最好的处理器之一。

1

对于因搜索而触发该主题的人来说,这个答案很晚。在提出这个问题时,XSLT中的多线程理论上是可能的,但在任何生产XSLT处理器中都没有实际实现。今天,多线程在Saxon-EE中是“开箱即用”的。在布拉格2015年XML上发表了一篇描述这种工作原理的文章:见http://www.saxonica.com/papers/xmlprague-2015mhk.pdf