XSLT处理器可以是多线程的吗?

时间:2009-11-11 07:51:12

标签: multithreading multicore stax xslt

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

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

我的预感是,XML可以被分割成可以由不同线程处理的块,但由于我并没有真正找到任何关于这种壮举的文档,我对此持怀疑态度。可以使用StAX同时分块XML吗?

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

你有什么想法?

3 个答案:

答案 0 :(得分:6)

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

顺便提一下,Saxon可用于.NET和Java,是最好的处理器之一。

答案 1 :(得分:5)

与大多数编程语言一样,只要遵循一些规则,循环本身就是可并行化的,这称为数据并行

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

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

对于变异和依赖关系的类似规则,您实际上可以在一种基于任务的并行性中并行化大多数XSLT转换。

首先,将文档整体划分为任务,在XSLT命令和文本节点边界进行分段;应根据每个任务在文档中的位置(从上到下)为每个任务分配一个顺序索引。

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

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

答案 2 :(得分:3)

对于因搜索而遇到此帖子的人来说,这是一个迟到的答案。在提出这个问题时,XSLT中的多线程是一种理论上的可能性,但在任何生产的XSLT处理器中都没有实现。今天,多线程可以在Saxon-EE中“开箱即用”。描述其工作原理的论文发表在XML Prague 2015:见http://www.saxonica.com/papers/xmlprague-2015mhk.pdf