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

Ben*_*ons 8 xslt multithreading stax multicore

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

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

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

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

你的想法是什么?

Pet*_*ist 6

Saxon:XSLT处理器的剖析,关于XSLT处理器,特别是撒克逊的优秀文章.它涵盖了多线程.

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


Mic*_*Kay 6

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


jos*_*rry 5

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

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

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

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

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

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

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