Многопоточность в Aspose.Slides для PHP через Java

Введение

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

Мы настоятельно рекомендуем не использовать единственный экземпляр Presentation в многопоточной среде, поскольку это может привести к непредсказуемым ошибкам или сбоям, которые трудно обнаружить.

Загрузка, сохранение и/или клонирование экземпляра класса Presentation в нескольких потоках не безопасны. Такие операции не поддерживаются. Если вам необходимо выполнять такие задачи, следует параллелить их, используя несколько одно-поточных процессов — каждый из этих процессов должен использовать свой собственный экземпляр презентации.

Мы не гарантируем многопоточность в PHP при использовании расширений. Если вы используете их, делайте это на свой страх и риск.

FAQ

Нужно ли вызывать настройку лицензии в каждом потоке?

Нет. Достаточно выполнить её один раз за процесс/домент приложения до запуска потоков. Если license setup может вызываться одновременно (например, при ленивой инициализации), синхронизируйте этот вызов, поскольку сам метод настройки лицензии не является потокобезопасным.

Можно ли передавать объекты Presentation или Slide между потоками?

Передача “живых” объектов презентации между потоками не рекомендуется: используйте независимые экземпляры для каждого потока или заранее создайте отдельные презентации/контейнеры слайдов для каждого потока. Такой подход соответствует общему совету не делить один экземпляр презентации между потоками.

Безопасно ли параллелить экспорт в разные форматы (PDF, HTML, images), если у каждого потока свой экземпляр Presentation?

Да. При наличии независимых экземпляров и отдельных путей вывода такие задачи обычно корректно параллелятся; избегайте совместного использования объектов презентации и общих потоков ввода/вывода.

Что делать с глобальными настройками шрифтов (папки, подстановки) в многопоточности?

Инициализируйте все глобальные font settings до запуска потоков и не меняйте их во время параллельной работы. Это устраняет гонки при доступе к общим шрифтовым ресурсам.