Выполнение произвольного кода с регулируемым количеством потоков от 1 до 64


Данную обработку можно использовать для изменения документов, справочников и других элементов с использованием до 64 ядер процессора. Увеличение скорости выполнения операций с базой 1С, между 1 потоком и 40, составляет 437%.

Проверено на платформе: 1С: Предприятие 8.3 (8.3.11.2954) с конфигурацией "Комплексная автоматизация для Казахстана, редакция 2" релиз (2.1.3.11). Будет работать на конфигурациях 1С (УТ, КА, ERP) в управляемых формах

За основу взяты:  infostart.ru/public/306865/  и  infostart.ru/public/405368/ 

Подключается (должны быть соответствующие права у пользователя) через:
 НСИ и администрирование —>  Настройка параметров системы  —> Печатные формы, отчеты и обработки —> Отчеты и обработки  —> Дополнительные отчеты и обработки  —> Создать  —> (выбрать файл)  —> Записать и закрыть. 

После подключения нужно открыть данную обработку через меню "Файл" —> "Открыть" в клиентском приложении. И в поле "Дополнительная обработка ссылка: " выбрать обработку "Выполнение произвольного кода в 10 потоков".

Принцип работы: 

При нажатии кнопки "Старт" происходит выполнение кода текст которого указан в поле "Текст запроса" в  результате выполнения должна получаться таблица с ссылками на объекты. Синтаксис как в конфигураторе!

Поле получения данной таблицы происходит выполнение действий над данными объектами, данные действия описываются в поле "Исполняемый код:" Объект над которым будет производиться действие использовать так как в примера  "ОбъектДействия". Синтаксис как в конфигураторе.

В новой версии учел замечания, добавил функционал, убрал ограничение на использование в 10 ядер.

Update: Добавил конструктор запроса в обработку (работает под толстым клиентом), оставил возможность использования произвольных параметров запроса.

 

22 Comments

  1. YannikAlx

    Сомнительная ценность обработки за такую цену….

    Идея не нова, реализации более полезные в наличии на форуме за 1 стартмани…

    Да даже фиксированное количество потоков — непонятка

    Reply
  2. echo77

    Взаимоблокировки не будут при таком подходе?

    Reply
  3. YannikAlx

    (2) А нет никакого метода — 10 потоков ПРОИЗВОЛЬНОГО кода , то есть чего напишете то и будет выполняться…

    От вас и будут зависеть блокировки.

    Reply
  4. YannikAlx

    Вот обработка с конкретным функционалом -успешно используется уже давно

    https://infostart.ru/public/804563/

    Reply
  5. romanpl777

    (2) блокировки, если они будут, обходит с помошью паузы на 1 секунду на данном потоке и повторными попытками пока не выполнит. Они обычно возникают если паралельно работают другие фоновые задания.

    Reply
  6. vipetrov2

    Через фоновое задание распараллеливать проще простого. Гораздо интереснее распараллеливать на стороне клиента, что бы можно было разрабатывать, например, обработки по шаблонам проектирования модель-представление.

    Вообще не понятно почему разработчики так плохо используют параллельное программирование, первые многоядерные пользовательские процессоры появились более 10 лет назад. Игры более менее многопоточными стали делать более менее активно 3-4 года назад. Компания 1С вроде пытается все больше и больше делать конфигуратор по шаблонам проектирования, но все равно очень медленно этот процесс идет.

    Reply
  7. romanpl777

    (1) Убрал фиксированное количество потоков, и увеличил их до 64. Как видно из картинок прирост скорости обработки, при увеличении с 6 до 40 потоков, составляет 143%.

    Reply
  8. romanpl777

    (4) не совсем такая, даже совсем не такая.

    Reply
  9. romanpl777

    (6) Задумка была в использовании именно внешней обработки как универсального механизма для быстрого изменения каких либо объектов в базе 1с.

    Reply
  10. Жернов Виктор

    (9) Обработка нужная, но не могу понять работает она или нет Тестировал в отладчике. Не останавливается на точке останова в процедуре перед записью в объекте Документе из списка сформированном в консоле запроса хотя опция debug на сервере у меня добавлена. Т е запрос формируется , фоновое задание запускаеся, индикатор и сообщения работают, но никаких операций с объектом действия не производится. Также писал для теста на табличном поле объекта действия проц с ошибками. Тестовых сообщений об ошибках не последовало.

    Reply
  11. Жернов Виктор

    (4) Отсутствует консоль запросов и возможность фильтрации ограничена. Весьма ограниченная вещь , а регистрацию я и сам успешно делаю.

    Reply
  12. YannikAlx

    (11) Обработка моя была приведена исключительно как пример мнгогопоточности — не более того — у каждого продукта можно найти недостатки, типа а на балалайке играть не умеет…

    И приведена была тут , поскольку за совершенно другую цену предлагалось что-то менее функциональное.

    Сейчас то автор поставил адекватную цену и вполне можно тестировать и дорабатывать под себя….

    Единственное проценты ускорения он рассчитывает на мой взгляд предвзято…

    На увеличение потоков не приводит к кратному увеличению скорости для простых операций, то есть достичь даже 100% не очень-то верится…

    10 потоков при проведении документов на 4 процессорном или 48 ядерном сервере давало прирост всего 30-40%

    при этом дальнейшее увеличение количества потоков давало прирост вообще не значительный , то есть 100% я по любому не достиг.

    С удовольствием протестирую сейчас предлагаемую обработку!

    Reply
  13. YannikAlx

    Уберите в своей обработке при открытии формы первичный запрос…

    ВЫБРАТЬ
    | Партнеры.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Партнеры КАК Партнеры
    |ГДЕ
    | Партнеры.Родитель = &Родитель

    Во первых не везде есть справочник Партнеры и возникает ошибка,

    во вторых если их очень много, а пользователю нужны не партнеры — куча потерянного времени…

    Reply
  14. YannikAlx

    Ни выбрать количества используемых потоков, ни выполнить тот запрос , что в конструкторе создан …

    Обработка неимоверно сырая!!!

    Пока не вижу ни малейшей возможности ее использовать, ибо не работает вообще в БП3…

    А уж куда как не стандарт — Бухгалтерия Предприятия…

    Reply
  15. YannikAlx

    (9) Вы сами попробуйте выполнить свою обработку вот с таким запросом

    ВЫБРАТЬ ПЕРВЫЕ 1000

    РеализацияТоваровУслуг.Ссылка КАК Ссылка

    ИЗ

    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

    ГДЕ

    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

    При том в параметрах выберите любой месяц, где есть документы…

    Ощущение , что вы ее ну очень рано выложили…

    Либо хотите чтобы ее пользователи отлаживали?

    Reply
  16. YannikAlx

    (10) Вы как определили , что она нужная, извините?

    Вы ее хоть каким-то образом смогли полезно применить в своей базе?

    Да она вообще ничего не делает, и пишет , что все прекрасно 5000 документов обработала за 1 сек.

    При этом даже не прикоснулась ни к одному!

    Да я большей лажи вообще не видел никогда на этом сайте!

    Вот оригинальный текст из обработки , выполняемый по команде СТАРТ

    &НаСервере
    Процедура СтартНаСервере(ПараметрыКоманды)
    
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    ДЛя каждого пар из ТаблицаПараметров цикл
    
    
    ЕСли пар.Свойкод тогда
    
    Выполнить(Пар.Значение);
    Запрос.УстановитьПараметр(пар.Парам, Вычислить(Пар.Значение));
    
    Иначе
    Запрос.УстановитьПараметр(пар.Парам, Пар.Значение);
    КонецЕсли;
    
    КонецЦикла;
    
    
    //   Выполнить(ТекстЗапроса);
    
    
    ТаблицаВся = Запрос.Выполнить().Выгрузить();
    ВсегоОбъектов = ТаблицаВся.Количество();
    
    ТекстТЗ = ЗначениеВСтрокуВнутр(ТаблицаВся);
    
    ПараметрыКоманды.Вставить(«ТекстТЗ», ТекстТЗ);
    
    Для ш=1 по КоличествоЗаданий  Цикл
    
    ВыполнитьКомандуОбработкиФоновымЗаданием(Строка(ш)+»Счетчик», ПараметрыКоманды, «ДанныеЗагружаютсяПрогресс»+Строка(ш));
    
    КонецЦикла;
    
    КонецПроцедуры // СтартНаСервере()
    

    Показать

    Reply
  17. Жернов Виктор

    (14) Коллега я не автор этой обработки и даже не стал тратить время на поиск ее ошибок . Нужная потому что мне нужна обработка с произвольным запросом, а не с фиксированными параметрами и запросом. Вот если бы в Вашу обработку добавить консоль запросов и не для толстого а для тонкого клиента она во многом бы выйграла . Еще конечно неплохо бы не только записывать а выполнять кое какие экспортные процедуры документов из списка, формируемого запросом.

    Впрочем напишу как нибудь сам просто мало времени. Кстати обратите внимание на блокировки. При работе В Вашей многопоточной обработке возникают ошибки взаимоблокировки. Работал один в базе и запускал многопоточную обработку. Потоки что ли не поделили записываемые объекты.

    С уважением Виктор

    Reply
  18. YannikAlx

    (17) да я безусловно знаю что вы не автор того что тут выложено и что трудно назвать обработкой вообще…

    моя же выполняет тот функционал, который нужен нашим бухам…

    Вам же могу посоветовать вот эту.

    По крайней мере очень универсальный инструмент…

    https://infostart.ru/public/635478/

    Reply
  19. Жернов Виктор

    Спасибо. У Вас хорошая обработка просто мне нужно несколько больше функционала..

    Reply
  20. romanpl777

    (19)

    Доброго дня, ну и понаписали Вы тут, обработка была проверена на КА и ЕРП, для успешной ее работы необходима регистрация ее как внешней обработки, а потом уже файл открыть внешнюю обработку. После этого нужно вверху указать подключенную в базу внешнюю обработку. после этого она начинает использовать потоки и вообще работать. Написано же было в описании:

    Подключается (должны быть соответствующие права у пользователя) через:

    НСИ и администрирование —> Настройка параметров системы —> Печатные формы, отчеты и обработки —> Отчеты и обработки —> Дополнительные отчеты и обработки —> Создать —> (выбрать файл) —> Записать и закрыть.

    После подключения нужно открыть данную обработку через меню «Файл» —> «Открыть» в клиентском приложении. И в поле «Дополнительная обработка ссылка: » выбрать обработку «Выполнение произвольного кода в 10 потоков».

    Reply
  21. romanpl777

    (13)

    После изменения текста на ваш запрос обработка его запомнит.

    Подключается (должны быть соответствующие права у пользователя) через:

    НСИ и администрирование —> Настройка параметров системы —> Печатные формы, отчеты и обработки —> Отчеты и обработки —> Дополнительные отчеты и обработки —> Создать —> (выбрать файл) —> Записать и закрыть.

    После подключения нужно открыть данную обработку через меню «Файл» —> «Открыть» в клиентском приложении. И в поле «Дополнительная обработка ссылка: » выбрать обработку «Выполнение произвольного кода в 10 потоков».

    Reply
  22. YannikAlx

    (21) Вот и не надо изначально там ничего писать!

    Ну если нет в принципе Справочника Партнеры.

    Обработка так же в принципе не откроется…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *