Назначение решения
Решение предназначено для встраивания в любой конфигурации 1С, работающие на платформе 1С:Предприятие 8.3. Позволяет выполнять алгоритмы в многопоточном режиме.
Фреймворк в виде одного общего модуля, позволяющего при получении объектов на обработку запускать их в несколько потоков. Особенности:
- Нет необходимости рассчитывать «порции» для обработки;
- Нет необходимости организовывать файловый обмен между потоками;
- Возможность запускать несколько менеджеров потоков одновременно, при этом потоки одного менеджера, могут запускать новые менеджеры со своими задачами и потоками;
- Можно выстраивать граф зависимости объектов, что позволяет, например, избегать взаимоблокировок и/или организовать восстановление партий (на нашем предприятии удалось добиться 10х+ ускорения при 10 потоках в рабочее время – 200+ активных пользователей;
- Все необходимые "вмешательство" в алгоритмы происходят с помощью событий;
- Возможность описывать алгоритмы событий, как в модуле менеджера, так и в любом другом модуле БД (предпочтительно), а также во внешней обработке.
- Автоматический рестарт потока в случае ошибок;
- Контроль за количеством рестартов по каждому объекту;
- Возможность получать «ответы» от потоков;
- Возможность контролировать работу с помощью «Инструментов разработчика» или иных отчетов;
- Возможность срочного прерывания работы и многое другое…
Концепция решения
Менеджер потоков является решением позволяющем разработчику перевести исполнение длительного по времени алгоритма на обработку в потоках. Обычно к таким обработкам относятся переработка больших массивов (коллекций) информации, а именно:
- Выгрузка / загрузка / обновление списков (справочник «Номенклатура»);
- Формирование объектов (создание цепочек документов);
- Формирование отчетов (формирование «Расчетных листов» по каждому сотруднику);
- Обработка объектов (заполнение, перезапись, перепроведение, удаление);
- Обработка сложно связанных объектов (графовая последовательность) уникальная возможность, позволяющая решить проблемы блокировок объектов при массовых обработках, а также строгую обработку объектов в определенной последовательности (текущий объект не обрабатывается до тех пор, пока не будут обработаны все объекты от которых он зависит), к таким задачам можно отнести «Восстановление последовательности партий», «Восстановление взаиморасчетов» и т.д.
Технические требования
- Разработка проводилось на 1С:Предприятие 8.3.9.1850 32x; Режим совместимости 8.2.15
- Работа в режиме «клиент-сервер»
- Возможность внесения изменений (дополнений) в конфигурации, в которую встраивается решение "Менеджер потоков"
Код открыт.
Возможности продукта
Менеджер потоков включает в себя весь функционал связанный с:
- Запуском потоков;
- Поддержанием жизнеспособности потоков (в случае «падения», поток перезапускается);
- Определением порции данных для каждого потока;
- Передачей данных между всеми участниками;
- Автоматической сборкой коллекций после обработки (если требуется);
- Выводом сообщений клиенту, выведенных при обработке в потоке;
- Созданием структуры взаимосвязей объектов (Граф);
- Контролем результатов обработки;
- Возможностью многократной обработки одного объекта и многое другое. Все взаимодействие разработчика с менеджером потоков происходит через "События*".
*События – это произвольный код разработчика находящийся в определенном контексте и выполняемый «Менеджером потоков» в разные моменты своего использования.
События используемые в «Менеджера потоков» (2.1.0):
- ПередЗапускомМенеджераПотоков (Основная программа);
- ПриЗапускеМенеджераПотоков (ФЗ Менеджера потоков);
- ПередЗапускомПотока (ФЗ Менеджера потоков);
- ПриЗапускеПотока (ФЗ Потока);
- ПриРасчетеРесурсов (ФЗ Потока);
- ПриОбработкеПотоком (ФЗ Потока);
- ПриОбработкеОшибки (Основная программа);
- ПриОбработкеПропуска (Основная программа);
- ПриОбработкеРезультата (Основная программа);
- ПриПроизвольнойОбработкеГрафа (ФЗ Менеджера потоков);
- ПередЗавершениемМенеджераПотоков (ФЗ Менеджера потоков);
- ПриСохраненииГрафа (Основная программа);
- ПриСборкеФрагментовКоллекции (Основная программа);
- ПослеЗавершенияМенеджераПотоков
Алгоритмы:
- Увеличена скорость обработки зависимых объектов на 15-25%, в ряде случаев до 50%;
- Полностью переписан весь код;
- Код проверен с помощью АПК 1.2 (исправлено 350+ замечаний и не соответсвий стандартам 1С, осталось 9 :));
- Работа с графом "неограниченного" размера;
- Приоритезирована раздачи заданий потокам;
- Реализована возможность в событиях (не во всех) дополнять "Параметры для объекта" - см. Руководство.
- Теперь поток, а не менеджер контролирует количество попыток обработать объект;
- События потоков теперь выполняются в "Попытка-Исключение" - позволяет избежать лишних перезапусков потоков;
- Модуль "мпОсновнаяПрограмма" - изменил идентификатор на: "мпОсновнаяПрограммаВызовСервера";
- Процедуры и функции уменьшены в размерах, для сокращения контекста (средний размер 17 строк; минимум 3 строки, максимум 73 строки);
- Все алгоритмы разнесен по областям;
- Шаблон модуля событий разработчика теперь выделен в отдельный модуль: "мпСобытияРазработчикаШаблон";
Исключено:
- механизм мониторинга (появится в след. релизах);
- механизм "безпотокового" выполнения.
- возможность написать весь код в модуле объекта обработки (противоречит работе в безопасном режиме).
Транспорт:
- Обмен данными теперь происходит пакетами;
События:
- Изменены:
Изменен состав параметров всех событий (требуется корректировка событий разработчика). - см. Руководство.
Имена:
- ПриПолученииРесурсов -> ПриРасчетеРесурсов
- ПриОбработкеДействияПотока -> ПриОбработкеПотоком
- ПриОбработкеОтвета -> ПриОбработкеРезультата
- ПриОбработкеМассиваОбработанныхФагментовКоллекции -> ПриСборкеФрагментовКоллекции
- Добавлены:
- ПриПроизвольнойОбработкеГрафа - см. Руководство.
- ПриСохраненииГрафа - см. Руководство.
- Исключены:
- ПриДобавленииВОчередьОбработки - теперь "Менеджер потоков" сам добавляет объект, если есть ресурсы, так же есть параметр "УчитыватьОбъектыБезРесурсов" - см. Руководство;
- ПриОбработкеДополненногоФагментаКоллекции - теперь и обработку, и дополнение можно осуществить через метод "Обработать коллекцию";
- ПриПолученииМестаХраненияФайловМониторинга - т.к. исключены механизмы мониторинга, данное событие утратило свою силу;
Параметры "Менеджера потоков":
- Изменены:
- Структура хранения параметров (полная структура параметров предоставлена в общем макете "мпПолнаяСтруктураПараметров")
- Имена:
- КоличествоЭлементовКолекцииНаПоток -> КоличествоЭлементовКолекцииНаОбъект
- РазрезМенеджера -> ИдентификаторМенеджера
- Добавлены:
- Общие.КоличествоОбъектовВПакете;
- Разработчик.Общие;
- Разработчик.ПоСобытиям;
- ОбработатьКоллекцию.СобратьКоллекциюИзФрагментов;
- ОбработатьКоллекцию.КоличествоЭлементовКоллекцииНаОбъект;
- ПолучитьГраф_Gephi.Каталог;
- Граф.ОграничениеРазмера;
- Граф.УчитыватьОбъектыБезРесурсов;
- Исключены:
- ДинамическийРассчетКоличестваПотоков -> Данный параметр больше не нужен, см. Руководство (параметр "КоличествоЭлементовКолекцииНаОбъект")
- КоэффициентКратностиОчередиПотоковКПотокам -> теперь "Менеджер потоков" работает с полным графом;
- ВестиМониторингМенеджераПотоков, т.к. механизм мониторинга исключен;
- ВестиМониторингПорядкаОбработкиОбъектов, т.к. механизм мониторинга исключен;
- ВестиМониторингОчередиНаОбработку, т.к. механизм мониторинга исключен;
Прочие изменения:
- добавлены методы и свойства формирования файлов для программ анализа графов;
- обработки демонстрирующие возможности "Менеджера потоков" реализованы более наглядно и обособленно друг от друга;
- восстановление партий УПП так же поддерживает версию 2.1.0
Способы обработки данных:
- ОбработатьОбъект() - метод предназначен для обработки объектов с помощью графовой последовательности (например, восстановление партий, восстановление последовательности расчетов и т.д.).
- ОбработатьКоллекцию() - метод предназначен для обработки ТаблицЗначений, СписковЗначений и Массивов. Менеджер потоков разобьёт коллекцию на фрагменты в зависимости от параметров и передаст их на обработку в потоки. Данным методом можно воспользоваться для:
- простой обработки коллекции (без возврата коллекции);
- обработки коллекции с возвратом такой же коллекции, но измененной (менеджер потоков сам соберет коллекцию из обработанных фрагментов);
- обработки коллекции с произвольным результатом (разработчик сам собирает (в событии) как дополнительно обработать обработанные фрагменты)
- ПолучитьГраф_Gephi() - метод позволяет получить файлы для загрузки в программу Gephi (https://gephi.org/), для дальнейшего анализа графа.
- ПроизвольнаяОбработкаГрафа() - если граф необходимо обработать по своему, то данный метод является альтернативой методу «ПолучитьГраф_Gephi»
Реализация движения данных
- «Основная программа» записывает в хранилище все необходимые данные для обработки.
- «Основная программа» записывает в зарезервированную для «Менеджера потоков» ячейку массив адресов с размещенными данными.
- «Менеджер потоков» на каждой итерации опрашивает ячейку с информацией о размещении новых данных.
- «Менеджер потоков» - считывает полученные данные для проведения анализа и построения графа (несвязанного).
- «Менеджер потоков» записывает в зарезервированные за каждым потоком ячейки, адреса, откуда потоку взять данные.
- «Поток» на каждой итерации опрашивает зарезервированную за собой ячейку на предмет появления информации о размещении данных.
- «Поток» по полученному адресу (п.6) считывает и обрабатывает данные.
- «Поток» после обработки формирует ответ и записывает его, туда же, откуда были считаны данные.
- «Поток» при штатном завершении обработки данных производит очистку своей зарезервированной ячейки.
- «Менеджер потоков» на каждой итерации производит опрос ячеек зарезервированные за потоками, куда были переданы адреса хранения данных для обработки. На данном этапе «Менеджер потоков» отслеживает активность потоков и в случае их «падения» запускает новый поток.
- «Менеджер потоков» считывает результат обработки и производит дальнейший анализ, при необходимости строит новый граф (связанный) и повторяет п.п. 5-10 (уже для обработки объекта по связям) или см. п. 12.
- «Менеджер потоков» записывает в зарезервированную для «Основной программы» ячейку информацию о результатах обработки.
- «Основная программа» на каждой итерации опрашивает ячейку с информацией о результатах обработки.
- «Основная программа» - считывает результат обработки объекта.
События разработчика
Доступность событий от методов:
Состав поставки
После покупки на почту придет архив .zip, который содержит файлы:
- Конфигурация .cf
- Руководство.pdf - также доступно на вкладке Бнсплатные файлы
Остались вопросы?
Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку
