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

12.02.25

База данных - HighLoad оптимизация

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Выполнение произвольного кода с числом задействованных ядер процессора от 1 до 64
.epf 17,24Kb ver:1.0.4
30 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Проверено на платформе: 1С: Предприятие 8.3 (8.3.25.1394) с конфигурацией 1С:ERP Управление предприятием 2 (2.5.17.183).

Будет работать на конфигурациях 1С (УТ, КА, ERP) в управляемых формах

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

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

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

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

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

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

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

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

Update:Добавил функционал: Работа в тонком клиенте, возможность использования строки из табличной части для манипуляций в исполняемом коде, убрал попытку, выполнение кода с объектом выполняется в транзанкции. 

 

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.20.97, 2.5.17.172
  • Управление торговлей, редакция 11, релизы 11.5.20.97, 11.5.17.190

Вступайте в нашу телеграмм-группу Инфостарт

Многопоточность Асинхронное выполнение кода Внешняя обработка Произвольный код

См. также

HighLoad оптимизация Программист 1C:ERP Бесплатно (free)

Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.

10.11.2025    5265    ivanov660    48    

51

HighLoad оптимизация Программист 1С:Предприятие 8 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    8110    ivanov660    39    

61

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    10536    ivanov660    13    

64

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    16507    Evg-Lylyk    73    

46

HighLoad оптимизация Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    8109    spyke    29    

54

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    11437    vasilev2015    22    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. YannikAlx 28 10.09.18 16:27 Сейчас в теме
Сомнительная ценность обработки за такую цену....
Идея не нова, реализации более полезные в наличии на форуме за 1 стартмани...
Да даже фиксированное количество потоков - непонятка
7. romanpl777 32 11.09.18 14:25 Сейчас в теме
(1) Убрал фиксированное количество потоков, и увеличил их до 64. Как видно из картинок прирост скорости обработки, при увеличении с 6 до 40 потоков, составляет 143%.
2. echo77 1936 10.09.18 16:40 Сейчас в теме
Взаимоблокировки не будут при таком подходе?
3. YannikAlx 28 10.09.18 16:46 Сейчас в теме
(2) А нет никакого метода - 10 потоков ПРОИЗВОЛЬНОГО кода , то есть чего напишете то и будет выполняться...
От вас и будут зависеть блокировки.
5. romanpl777 32 10.09.18 17:34 Сейчас в теме
(2) блокировки, если они будут, обходит с помошью паузы на 1 секунду на данном потоке и повторными попытками пока не выполнит. Они обычно возникают если паралельно работают другие фоновые задания.
4. YannikAlx 28 10.09.18 16:48 Сейчас в теме
Вот обработка с конкретным функционалом -успешно используется уже давно
https://infostart.ru/public/804563/
8. romanpl777 32 11.09.18 14:26 Сейчас в теме
(4) не совсем такая, даже совсем не такая.
11. Жернов Виктор 7 04.12.19 10:43 Сейчас в теме
(4) Отсутствует консоль запросов и возможность фильтрации ограничена. Весьма ограниченная вещь , а регистрацию я и сам успешно делаю.
12. YannikAlx 28 04.12.19 11:10 Сейчас в теме
(11) Обработка моя была приведена исключительно как пример мнгогопоточности - не более того - у каждого продукта можно найти недостатки, типа а на балалайке играть не умеет...
И приведена была тут , поскольку за совершенно другую цену предлагалось что-то менее функциональное.
Сейчас то автор поставил адекватную цену и вполне можно тестировать и дорабатывать под себя....
Единственное проценты ускорения он рассчитывает на мой взгляд предвзято...
На увеличение потоков не приводит к кратному увеличению скорости для простых операций, то есть достичь даже 100% не очень-то верится...
10 потоков при проведении документов на 4 процессорном или 48 ядерном сервере давало прирост всего 30-40%
при этом дальнейшее увеличение количества потоков давало прирост вообще не значительный , то есть 100% я по любому не достиг.

С удовольствием протестирую сейчас предлагаемую обработку!
6. vipetrov2 11.09.18 05:13 Сейчас в теме
Через фоновое задание распараллеливать проще простого. Гораздо интереснее распараллеливать на стороне клиента, что бы можно было разрабатывать, например, обработки по шаблонам проектирования модель-представление.
Вообще не понятно почему разработчики так плохо используют параллельное программирование, первые многоядерные пользовательские процессоры появились более 10 лет назад. Игры более менее многопоточными стали делать более менее активно 3-4 года назад. Компания 1С вроде пытается все больше и больше делать конфигуратор по шаблонам проектирования, но все равно очень медленно этот процесс идет.
9. romanpl777 32 11.09.18 14:27 Сейчас в теме
(6) Задумка была в использовании именно внешней обработки как универсального механизма для быстрого изменения каких либо объектов в базе 1с.
10. Жернов Виктор 7 04.12.19 10:20 Сейчас в теме
(9) Обработка нужная, но не могу понять работает она или нет Тестировал в отладчике. Не останавливается на точке останова в процедуре перед записью в объекте Документе из списка сформированном в консоле запроса хотя опция debug на сервере у меня добавлена. Т е запрос формируется , фоновое задание запускаеся, индикатор и сообщения работают, но никаких операций с объектом действия не производится. Также писал для теста на табличном поле объекта действия проц с ошибками. Тестовых сообщений об ошибках не последовало.
16. YannikAlx 28 04.12.19 12:11 Сейчас в теме
(10) Вы как определили , что она нужная, извините?
Вы ее хоть каким-то образом смогли полезно применить в своей базе?
Да она вообще ничего не делает, и пишет , что все прекрасно 5000 документов обработала за 1 сек.
При этом даже не прикоснулась ни к одному!

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

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

 
   ТаблицаВся = Запрос.Выполнить().Выгрузить();
   ВсегоОбъектов = ТаблицаВся.Количество();
   
   ТекстТЗ = ЗначениеВСтрокуВнутр(ТаблицаВся);

   ПараметрыКоманды.Вставить("ТекстТЗ", ТекстТЗ);

   Для ш=1 по КоличествоЗаданий  Цикл
   	
   ВыполнитьКомандуОбработкиФоновымЗаданием(Строка(ш)+"Счетчик", ПараметрыКоманды, "ДанныеЗагружаютсяПрогресс"+Строка(ш));

	КонецЦикла;
	
КонецПроцедуры // СтартНаСервере()
Показать
15. YannikAlx 28 04.12.19 12:04 Сейчас в теме
(9) Вы сами попробуйте выполнить свою обработку вот с таким запросом
ВЫБРАТЬ ПЕРВЫЕ 1000
РеализацияТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

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

Ощущение , что вы ее ну очень рано выложили...
Либо хотите чтобы ее пользователи отлаживали?
13. YannikAlx 28 04.12.19 11:39 Сейчас в теме
Уберите в своей обработке при открытии формы первичный запрос...
ВЫБРАТЬ
		               |	Партнеры.Ссылка КАК Ссылка
		               |ИЗ
		               |	Справочник.Партнеры КАК Партнеры
		               |ГДЕ
		               |	Партнеры.Родитель = &Родитель

Во первых не везде есть справочник Партнеры и возникает ошибка,
во вторых если их очень много, а пользователю нужны не партнеры - куча потерянного времени...
21. romanpl777 32 10.12.19 17:45 Сейчас в теме
(13)

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


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

После подключения нужно открыть данную обработку через меню "Файл" --> "Открыть" в клиентском приложении. И в поле "Дополнительная обработка ссылка: " выбрать обработку "Выполнение произвольного кода в 10 потоков".
22. YannikAlx 28 10.12.19 17:49 Сейчас в теме
(21) Вот и не надо изначально там ничего писать!
Ну если нет в принципе Справочника Партнеры.
Обработка так же в принципе не откроется...
14. YannikAlx 28 04.12.19 11:55 Сейчас в теме
Ни выбрать количества используемых потоков, ни выполнить тот запрос , что в конструкторе создан ...
Обработка неимоверно сырая!!!

Пока не вижу ни малейшей возможности ее использовать, ибо не работает вообще в БП3...
А уж куда как не стандарт - Бухгалтерия Предприятия...
17. Жернов Виктор 7 04.12.19 15:29 Сейчас в теме
(14) Коллега я не автор этой обработки и даже не стал тратить время на поиск ее ошибок . Нужная потому что мне нужна обработка с произвольным запросом, а не с фиксированными параметрами и запросом. Вот если бы в Вашу обработку добавить консоль запросов и не для толстого а для тонкого клиента она во многом бы выйграла . Еще конечно неплохо бы не только записывать а выполнять кое какие экспортные процедуры документов из списка, формируемого запросом.
Впрочем напишу как нибудь сам просто мало времени. Кстати обратите внимание на блокировки. При работе В Вашей многопоточной обработке возникают ошибки взаимоблокировки. Работал один в базе и запускал многопоточную обработку. Потоки что ли не поделили записываемые объекты.

С уважением Виктор
18. YannikAlx 28 04.12.19 15:39 Сейчас в теме
(17) да я безусловно знаю что вы не автор того что тут выложено и что трудно назвать обработкой вообще...
моя же выполняет тот функционал, который нужен нашим бухам...
Вам же могу посоветовать вот эту.
По крайней мере очень универсальный инструмент...
https://infostart.ru/public/635478/
19. Жернов Виктор 7 04.12.19 15:44 Сейчас в теме
Спасибо. У Вас хорошая обработка просто мне нужно несколько больше функционала..
20. romanpl777 32 10.12.19 17:42 Сейчас в теме
(19)
Доброго дня, ну и понаписали Вы тут, обработка была проверена на КА и ЕРП, для успешной ее работы необходима регистрация ее как внешней обработки, а потом уже файл открыть внешнюю обработку. После этого нужно вверху указать подключенную в базу внешнюю обработку. после этого она начинает использовать потоки и вообще работать. Написано же было в описании:

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

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