Многопоточность в 1С

Рассмотрим методы ускорения обработки данных более подробно.
Разберем работу с многопоточностью в конфигурации. Многопоточность позволяет решить несколько задач:
- ускорить обработку данных;
- избавляет пользователя от ожидания выполнения с зависшей формой.
Пример использования многопоточности.
Создадим новый общий модуль "ФоновыеЗаданияЗагрузки". В нем пропишем следующую процедуру:

Процедура ДобавитьЭлементыСправочника(КоличествоЭлементов)Экспорт
 
 Для индекс = 1 По КоличествоЭлементов Цикл
  ИмяЭлемента = "Элемент номер " + Строка(индекс);
  ОбъектСправочник = Справочники.ТестированиеЗагрузкиДанных
  .СоздатьЭлемент();
  ОбъектСправочник.Наименование = ИмяЭлемента;
  ОбъектСправочник.Записать();
 КонецЦикла;

КонецПроцедуры
Для запуска многопоточного выполнения этой процедуры в обработке пропишем следующий код:

Процедура ЗаполнитьСправочникДанными(КоличествоПотоков)Экспорт
 
 ОбщееКоличетсвоДанных = 80000;
 КоличествоДанныхВОдномПотоке = ОбщееКоличетсвоДанных / КоличествоПотоков;
 МассивПараметров = Новый Массив;
 МассивПараметров.Добавить(КоличествоДанныхВОдномПотоке);
 МассивФоновыхЗаданий = Новый Массив;
 
 Для индекс = 1 По КоличествоПотоков Цикл
  ЗаданиеЗагрузки = ФоновыеЗадания.Выполнить(
  "ФоновыеЗаданияЗагрузки.ДобавитьЭлементыСправочника"
  , МассивПараметров);
  МассивФоновыхЗаданий.Добавить(ЗаданиеЗагрузки);
 КонецЦикла;
 
 ФоновыеЗадания.ОжидатьЗавершения(МассивФоновыхЗаданий);
 
КонецПроцедуры
У этого механизма есть очень большой плюс - значительное сокращение времени обработки данных, и более полное использование аппаратных мощностей. Приведенное в примере решение блокирует форму обработки из-за использования метода фоновых заданий "ОжидатьЗавершения". Но есть и другие способы проверки окончания фоновых заданий, которые не блокируют работу пользователя. Например использование метода "ПолучитьФоновыеЗадания"

Но решение не лишено и недостатков:
- для реализации многопоточности необходим сервер 1С предприятия. На файловой БД многопоточность работать не будет, потоки будут идти один за другим по очереди;
- невозможно реализовать решение во внешней обработке (по крайней мере я не нашел способов). Решение будет обоснованным только при необходимости выполнения периодической обработки данных, по причине создания или редактирования общего модуля приложения.

Комментариев нет:

Отправить комментарий