Могут ли процессоры XSLT быть многопоточными? - PullRequest
8 голосов
/ 11 ноября 2009

Я ловлю подходы к проблеме с обработкой XSLT.

Можно ли использовать параллельную обработку для ускорения процессора XSLT? Или процессоры XSLT по своей природе последовательны?

Я догадываюсь, что XML можно разбить на куски, которые могут обрабатываться разными потоками, но, поскольку я на самом деле не нахожу документацию такого подвига, я скептически отношусь Возможно ли использовать StAX для одновременной порции XML?

Кажется, что большинство процессоров XSLT реализованы на Java или C / C ++, но у меня действительно нет целевого языка. Я просто хочу знать, возможен ли многопоточный процессор XSLT.

Что ты думаешь?

Ответы [ 3 ]

6 голосов
/ 11 ноября 2009

Saxon: анатомия XSLT-процессора , отличная статья о XSLT-процессорах, в частности, саксонской. Охватывает многопоточность.

Кстати, Saxon доступен как для .NET, так и для Java и является одним из лучших доступных процессоров.

5 голосов
/ 11 ноября 2009

Как и в большинстве языков программирования, зацикливание по сути своей распараллеливается, если вы соблюдаете несколько правил, это называется параллелизмом данных

  • Нет мутации общего состояния в цикле
  • Одна итерация цикла не может зависеть от результата другой итерации

Любые циклические конструкции можно довольно легко распараллелить в XSLT.

С подобными правилами против мутаций и зависимостей вы действительно могли бы распараллелить большую часть XSLT-преобразования в виде параллелизма на основе задач.

Во-первых, разбить документ целиком на задачи, сегментированные по границам команд XSLT и текстовых узлов; Каждой задаче должен быть присвоен последовательный индекс в соответствии с ее положением в документе (сверху вниз).

Затем разбейте задачи на отдельные функции обработки XSLT, каждая из которых работает в разных потоках; все эти процессоры необходимо инициализировать с одинаковым глобальным состоянием (переменные, константы и т. д.).

Наконец, после завершения всех преобразований управляющий поток должен собрать результаты (преобразованные строки) в порядке индекса и собрать их в готовый документ.

3 голосов
/ 24 апреля 2017

Поздний ответ, для людей, которые попали в эту ветку в результате поиска. В то время, когда задавался этот вопрос, многопоточность в XSLT была теоретической возможностью, но фактически не была реализована ни в каких процессорах XSLT. Сегодня многопоточность доступна в стандартной комплектации в Saxon-EE. Документ, описывающий, как эти работы были опубликованы на XML Prague 2015: см. http://www.saxonica.com/papers/xmlprague-2015mhk.pdf

...