|
Параллельная обработка данных в таблице значений | ☑ | ||
---|---|---|---|---|
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) спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |