2009-11-11 14 views
8

Estoy buscando enfoques para un problema con el procesamiento XSLT.¿Pueden los procesadores XSLT tener múltiples subprocesos?

¿Es posible utilizar el procesamiento paralelo para acelerar un procesador XSLT? ¿O los procesadores XSLT son intrínsecamente seriales?

Mi corazonada es que XML se puede dividir en fragmentos que pueden ser procesados ​​por diferentes hilos, pero como realmente no encuentro ninguna documentación de tal hazaña, me estoy poniendo escéptico. Es posible usar StAX para dividir simultáneamente XML?

Parece que la mayoría de los procesadores XSLT están implementados en Java o C/C++, pero realmente no tengo un idioma de destino. Solo quiero saber si es concebible un procesador XSLT multiproceso.

¿Cuáles son sus pensamientos?

Respuesta

5

Como la mayoría de los lenguajes de programación en bucle es inherentemente paralelizable, siempre y cuando siga un par de reglas, esto se conoce como datos Paralelismo

  • Sin mutación del estado compartido en el bucle
  • una iteración del bucle no puede Depende del resultado de otra iteración

Cualquier construcción de bucle se podría paralelizar en XSLT con bastante facilidad.

Con reglas similares frente a las mutaciones y las dependencias, en realidad podrías paralelizar la mayor parte de una transformación XSLT en una especie de paralelismo basado en tareas.

En primer lugar, fragmente el documento en tareas, segmente en el comando XSLT y en los límites del nodo de texto; a cada tarea se le debe asignar un índice secuencial según su posición en el documento (de arriba a abajo).

A continuación, disemine las tareas a distintas funciones de procesamiento XSLT cada una ejecutando en diferentes hilos; todos estos procesadores deberán inicializarse con el mismo estado global (variables, constantes, etc.).

Finalmente, una vez que se completan todas las transformaciones, el hilo de control debe reunir los resultados (cadenas transformadas) en orden de índice y ensamblarlos en el documento final.

+1

'' y 'xsl: variable' son inmutables. ¿Hay algo más en XSLT que pueda ser mutable? No puedo pensar en nada mutable de la mano. – ndim

+0

ah sí, cierto; mi XSL está un poco oxidado Por lo tanto, XSLT debería ser un buen objetivo para el paralelismo utilizando fragmentos de documentos y paralelismo de bucles. – joshperry

6

Saxon: Anatomy of an XSLT Processor, excelente artículo sobre los procesadores XSLT, saxon en particular. Cubre multihilo.

Saxon por cierto está disponible tanto para .NET como para Java y es uno de los mejores procesadores disponibles.

1

Una respuesta tardía, para las personas que tocan este hilo como resultado de una búsqueda. En el momento en que se planteó esta pregunta, el subprocesamiento múltiple en XSLT era una posibilidad teórica, pero en realidad no se realizó en ningún procesador de producción XSLT. Hoy en día, el multihilo está disponible "out-of-the-box" en Saxon-EE. Un documento que describe cómo funciona esto fue publicado en XML Praga 2015: vea http://www.saxonica.com/papers/xmlprague-2015mhk.pdf

Cuestiones relacionadas