Выполнение произвольного кода с регулируемым количеством потоков от 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 не будет опубликован. Обязательные поля помечены *