Как и в большинстве языков программирования, зацикливание по сути своей распараллеливается, если вы соблюдаете несколько правил, это называется параллелизмом данных
- Нет мутации общего состояния в цикле
- Одна итерация цикла не может зависеть от результата другой итерации
Любые циклические конструкции можно довольно легко распараллелить в XSLT.
С подобными правилами против мутаций и зависимостей вы действительно могли бы распараллелить большую часть XSLT-преобразования в виде параллелизма на основе задач.
Во-первых, разбить документ целиком на задачи, сегментированные по границам команд XSLT и текстовых узлов; Каждой задаче должен быть присвоен последовательный индекс в соответствии с ее положением в документе (сверху вниз).
Затем разбейте задачи на отдельные функции обработки XSLT, каждая из которых работает в разных потоках; все эти процессоры необходимо инициализировать с одинаковым глобальным состоянием (переменные, константы и т. д.).
Наконец, после завершения всех преобразований управляющий поток должен собрать результаты (преобразованные строки) в порядке индекса и собрать их в готовый документ.