9

XSLT 処理の問題へのアプローチを探しています。

並列処理を使用して XSLT プロセッサを高速化することは可能ですか? それとも、XSLT プロセッサは本質的にシリアルですか?

私の推測では、XML はさまざまなスレッドで処理できるチャンクに分割できますが、そのような偉業に関するドキュメントを実際に見つけていないため、懐疑的になっています。StAX を使用して XML を同時にチャンクすることは可能ですか?

ほとんどの XSLT プロセッサは Java または C/C++ で実装されているようですが、実際にはターゲット言語がありません。マルチスレッド XSLT プロセッサが考えられるかどうかを知りたいだけです。

あなたの考えは何ですか?

4

3 に答える 3

6

Saxon: Anatomy of an XSLT Processor、XSLT プロセッサ、特に saxon に関する優れた記事。マルチスレッドをカバーしています。

ちなみに、Saxon は .NET と Java の両方で使用でき、入手可能な最高のプロセッサの 1 つです。

于 2009-11-11T10:19:27.003 に答える
5

ほとんどのプログラミング言語と同様に、ループは、いくつかのルールに従う限り、本質的に並列化可能です。これは、データ並列処理として知られています。

  • ループ内の共有状態の変異はありません
  • ループの1回の反復は、別の反復の結果に依存することはできません

ループ構造は、XSLTでかなり簡単に並列化できます。

ミューテーションと依存関係に対する同様のルールを使用すると、一種のタスクベースの並列処理でほとんどのXSLT変換を実際に並列化できます。

まず、ドキュメント全体をタスクに断片化し、XSLTコマンドとテキストノードの境界でセグメント化します。各タスクには、ドキュメント内の位置(上から下)に応じて順次インデックスを割り当てる必要があります。

次に、それぞれが異なるスレッドで実行されている個別のXSLT処理関数にタスクを分散させます。これらのプロセッサはすべて、同じグローバル状態(変数、定数など)で初期化する必要があります。

最後に、すべての変換が完了すると、制御スレッドは結果(変換された文字列)をインデックス順に収集し、完成したドキュメントにアセンブルする必要があります。

于 2009-11-11T08:17:30.317 に答える