|
|
#1 |
|
Участник
|
Вводная часть:
В текущем проекте используем различного рода автоматизации процессов, например, таких как CI/CD. Данные процессы должны отвечать критериям отказоустойчивости и быстродействия. Вопрос с быстродействием проведения глобальной компиляции приложения длительное время не давал покоя. Изначально он занимал в районе 1.5 часа. Путём оптимизации конфигураций приложения данное значение удалось сократить на 40%. Например, выявили корреляцию в 1% между временем компиляции и увеличением тактовой частоты ЦПУ на 3%. Только занимаемое процессом время всё равно оставалось приближено к одному часу и быстрее разогнать не получалось - упёрлись в возможности вертикального масштабирования. В рамках факультатива взял в проработку оптимизационный вопрос по многопоточной компиляции в Аксапте 2009. В отличии от 2012 версии, где данным процессом заведует сам АОС запущенный со специальными параметрами, в 2009 не было выявлено ни единого намёка на возможность осуществления данного действия без использования клиентского приложения (цели написать своё приложение, осуществляющее компиляцию, не стояло). Данное ограничение и послужило основой решения, о котором далее пойдет речь, позволившего сократить время компиляции ещё на 30% от номинального (далее система упирается в блокировки aod/aoi файлов). Основная часть: Необходимо отметить, что данное решение находится на стадии тестирования (ссылка на репозиторий) и представляет собой: 3 таблицы, 2 класса. Класс TaskBasedCompileProcessCreator - подготавливает приложение, формируя задания. Необходимо учитывать, что перечень компилируемых веток дерева приложения ограничен программно и может потребовать внесения корректировок при использовании в ваших проектах. Класс TaskBasedCompileWorker - запускает обработчик, цель которого выполнить все сгенерированные задания. Результат компиляции сохраняется в таблицу TaskBasedCompileResult (см. SysCompilerOutput::exportLog). Для отслеживания статуса выполнения можно использовать таблицу TaskBasedCompileProcess с запросом вида: X++: SELECT count(RecId), minOf(StartDT), maxOf(EndDT) FROM TaskBasedCompileProcess group by Status |
|
|
|
| За это сообщение автора поблагодарили: Logger (15). | |
| Теги |
| ax2009, axbuild.exe |
|
|
|