Имя: Пароль:
1C
1С v8
Параллельная обработка данных в таблице значений
0 Mr_Best
 
17.06.15
12:26
Добрый день!
Вопрос мой больше на интерес, чем на практику, поэтому прошу не засыпать руганьями сразу :)

Параметры вопроса:
- 1С:Предприятие 8.3 (8.3.5.1486)
- Режим обычного приложения
- Клиент-Серверный вариант 32 бита
- Процессор Xeon X3450, 8-ядер
- Память 12 Гб

А вопрос следующий:
Есть некая таблица значений. Требуется произвести некие вычисления этой таблицы, но вычисления сложные и занимают продолжительное время. Во время этих вычислений процессор загружен на 20% максимум. К счастью алгоритм вычислений является не блокирующим, но !!! Как задействовать несколько ядер на вычисление данной таблицы? Это вообще возможно в 1С?
1 UFO
 
17.06.15
12:28
Насчет ядер 1С этим сама занимается с помощью винды там или линукса, а вот слега распараллелить вот Книга знаний: Асинхронные вычисления без «заморозки» формы (на фоновых заданиях)
2 Mr_Best
 
17.06.15
12:40
(1) читал, но как будут разные фоновые задания обрабатывать одну таблицу значений!? Я нашел следующие способы:
- ПараметрыСеанса, создать реквизит ХранилищеЗначений и записывать туда ТаблицуЗначений, что бы прочитать в другом фоновом задании. Но тогда мы тратим время на сериализацию.
- БазаДанных, например в регистре сведений - но это тоже медленно, т.к. данные хранятся не в оперативной памяти.
- Хранилище настроек, но здесь тоже сериализация.
- ВызватьИсключение и передать в качестве описания ошибки значение, но и здесь тоже серализация.
Поправьте меня, если я где-то ошибся. Выходит, что быстро, без ненужных обработок во время передачи данных между фоновыми заданиями без сериализации не обойтись?
3 Classic
 
17.06.15
12:42
(2)
В фоновые задания можно передавать параметры
4 Mr_Best
 
17.06.15
12:49
(3) допустим мы передали в 4 фоновых задания одну и туже таблицу значений, как из 3-х фоновых заданий посмотреть результат вычисления в 4-том фоновом задании до окончания выполнения фонового задания (или всех фоновых заданий) ?
И даже по окончании всех 4-х фоновых заданий, что бы собрать результат вычислений в одну таблицу придется сериализовать вычисленную таблицу значений в каждом фоновом задании и передать их в основную сессию (пользовательскую) и в ней потом собрать в одну? Это же пипец сколько накладных расходов!!!!
5 Classic
 
17.06.15
12:58
(4)
Накладные расходы - стандартная проблема в параллельных вычислениях.
Не пойму, чего ты хочешь. Хочешь параметр сеанса с типом ТаблицаЗначений?
6 stonewolf
 
17.06.15
13:04
Передать в фоновые копии таблиц с диапазонами вычислений. После возврата заполнить результаты в исходной.
7 Mr_Best
 
17.06.15
13:11
(5) ну не отказался бы :) А по какой причине в 1С в параметрах сеанса это не реализовано? И почему только фиксированные массивы, соответствия и структуры? Ведь есть же адекватная причина ...
(6) да, по всей видимости это единственно доступный способ, придется юзать его.
Жаль конечно, что нельзя разместить данные в определенном диапазоне оперативной памяти и заставить несколько ядер их обрабатывать напрямую, здесь и накладных расходов нету кроме блокировок адресов памяти ...
8 Classic
 
17.06.15
13:15
Подозреваю, что адекватная причина  - мутабельность ТЗ
9 Mr_Best
 
17.06.15
13:27
(8) спасибо
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс