2009-11-11 3 views
8

저는 XSLT 처리 문제에 대한 접근 방법을 찾고 있습니다.XSLT 프로세서가 멀티 스레드 일 수 있습니까?

병렬 처리를 사용하여 XSLT 프로세서 속도를 향상시킬 수 있습니까? 또는 XSLT 프로세서가 본질적으로 직렬입니까?

필자의 직감은 XML을 여러 스레드로 처리 할 수있는 청크로 분할 할 수 있지만, 실제로 이러한 위업에 대한 문서를 찾지 못했기 때문에 회의적입니다. StAX를 사용하여 XML을 동시에 청크 할 수 있습니까?

대부분의 XSLT 프로세서는 Java 또는 C/C++로 구현되어 있지만 실제로는 대상 언어가없는 것으로 보입니다. 난 그냥 멀티 스레드 XSLT 프로세서가 상상할 수 있는지 알고 싶다.

귀하의 의견은 무엇입니까? 당신은 몇 가지 규칙을 따라야으로 반복 대부분의 프로그래밍 언어와 마찬가지로

답변

5

이가 루프에서 데이터 병렬

  • 로 공유 상태의 어떤 돌연변이를 알 수 없습니다,만큼 본질적으로 병렬이다
  • 한 루프의 반복은 할 수 없습니다 다른 반복의 결과에 따라 달라집니다.

모든 루핑 구문은 XSLT에서 매우 쉽게 병렬 처리 될 수 있습니다.

돌연변이 및 종속성에 대한 비슷한 규칙을 사용하면 일종의 작업 기반 병렬 처리에서 실제로 대부분의 XSLT 변환을 병렬 처리 할 수 ​​있습니다.

먼저 문서 전체를 작업으로 분할하고 XSLT 명령 및 텍스트 노드 경계에서 세그먼트 화합니다. 각 작업에는 문서의 위치 (위에서 아래로)에 따라 순차 색인이 지정되어야합니다.

다음으로 각 스레드가 서로 다른 XSLT 처리 함수로 분산됩니다. 이 프로세서는 모두 동일한 전역 상태 (변수, 상수 등)로 초기화해야합니다.

마지막으로 모든 변환이 완료되면 제어 스레드는 결과 (변환 된 문자열)를 인덱스 순서로 수집하고 완성 된 문서로 어셈블해야합니다.

+1

및 xsl : variable은 불변입니다. XSLT에 변경할 수있는 다른 것이 있습니까? 나는 바꿔 놓을 수없는 것을 생각할 수 없다. – ndim

+0

아아, 그렇습니다; 내 XSL은 녹슬 었어. 따라서 XSLT는 문서 조각 및 루프 병렬 처리를 사용하는 병렬 처리의 목표가되어야합니다. – joshperry

6

Saxon: Anatomy of an XSLT Processor, 특히 XSLT 프로세서, 색슨에 관한 우수 기사. 그것은 멀티 스레딩을 다룹니다.

Saxon by the way는 .NET과 Java 모두에서 사용할 수 있으며 사용 가능한 최상의 프로세서 중 하나입니다.

1

검색 결과로이 스레드에 걸린 사람들을위한 늦은 답변입니다. 이 질문이 제기 된 시점에서 XSLT의 멀티 스레딩은 이론적 인 가능성이 있었지만 프로덕션 XSLT 프로세서에서는 실제로 실현되지 않았습니다. 현재 멀티 스레딩은 Saxon-EE에서 "즉시 사용 가능"으로 제공됩니다. 이 작업 방법을 설명하는 문서는 XML Prague 2015에 게시되었습니다. http://www.saxonica.com/papers/xmlprague-2015mhk.pdf