Имя: Пароль:
1C
1С v8
1с передача данных между фоновыми заданиями в оперативной памяти?
,
0 novichok79
 
10.10.18
11:01
доброго вам утра, уважаемые специалисты.
в общем, есть задача критическая по скорости выполнения.
она выполняется в несколько потоков, потоки сбрасывают протоколы выполнения в хранилище системных настроек. а основной поток, который опрашивает вспомогательные с периодичностью льет логи во внешний сервис протоколирования.
сейчас для передачи сообщений протоколов между фоновыми заданиями и основным я использую хранилище общих настроек. а его методы тормозные, т. к. вполне возможно, что данное хранилище хранится в таблицах СУБД. по хорошему, мне надо выделить какую-то область в памяти сервака для каждого фонового задания и лить туда массивы с сообщениями протоколов напрямую. это возможно вообще в 1С?
заранее благодарю за помощь.
1 quest
 
10.10.18
11:03
а нельзя все потоки заставить лить лги во внешний сервис и нее мучаться с синхронизацией?
2 novichok79
 
10.10.18
11:07
(1) ха! так было сделано еще в первой версии, обращение к апи жрет 1 секунду, сейчас сообщения накапливаются по 10 штук в порции и отправляются в хоронилище сис. настроек, но даже эта операция записи в хоронилище довольно затратна по времени.
у меня есть мысль - сделать RAMDrive на серваке, лить туда текстовые файлы, а потом основным заданием их забирать, тогда данные будут доступны отовсюду и будут лежать в памяти сервака гарантированно.
3 novichok79
 
10.10.18
11:30
https://sourceforge.net/projects/imdisk-toolkit/
хоба, allocate memory dynamically, то что нужно.
4 xxTANATORxx
 
10.10.18
11:33
(0) вк как вариант
5 novichok79
 
10.10.18
11:36
(4) да, но что будет быстрее - внешняя компонента и ее отладка, или запилить RAMDrive на какой-нибудь exfat?
6 Fragster
 
гуру
10.10.18
11:40
В многопоточном тесте используется метод Сообщить. В подсистеме длительных операций БСП тоже.
7 Fragster
 
гуру
10.10.18
11:40
для передачи данных "наверх"
8 novichok79
 
10.10.18
11:42
(7) это типа быстрее? откуда я знаю что сообщения фоновых не хранятся где-нибудь в таблицах на диске?
9 Fragster
 
гуру
10.10.18
11:42
(8) ну, я хз, конечно, но в многопоточном тесте данные от 100 потоков вполне себе быстро приходят в основной поток.
10 Fragster
 
гуру
10.10.18
11:43
вроде лони в rmngr хранятся
11 Fragster
 
гуру
10.10.18
11:43
*они
12 novichok79
 
10.10.18
11:44
(10) то есть в памяти процесса, да?
13 Fragster
 
гуру
10.10.18
11:45
(12) да
14 Borteg
 
10.10.18
11:49
(2) а обращение основного потока разве не затрачивает это же время на обращение к апи? Только дополнительно затрачивается время на запись в хранилище и время на опрос этого хранилище и прочую ерунду?
15 Cyberhawk
 
10.10.18
11:51
В ФЗ "Сообщить" + ФЗ.ПолучитьСообщенияПользователю извне
16 Borteg
 
10.10.18
11:53
(2) ведь проблема похоже не в том насколько быстро обрабатывается информация потоками, а насколько быстро внешний ресурс может принимать эти данные.  Наверное на стороне  внешнего ресурса должна быть очередь, и ответ должен приходить не сразу при обращении к сервису, а через на адрес указанный в запросе после обработки.
17 novichok79
 
10.10.18
11:54
(16) можно вынести в отдельный поток отправку сообщений или вообще в отдельное регл. задание
18 Borteg
 
10.10.18
11:56
(17) но ведь время работы с внешним сервисом тогда не изменится? Я не могу понять проблема со скоростью появления данных во внешнем сервисе или в формировании на стороне 1с перед отправкой во внешний сервис
19 novichok79
 
10.10.18
11:56
(17) но пока фоновое залогинится в базу, пока оно отработает... это все тоже время.
20 novichok79
 
10.10.18
11:57
(18) проблема в обращении к хранилищу системных настроек, которое жутко долго отрабатывает
21 Borteg
 
10.10.18
11:59
(20) тогда отправка прям из фонового задания чем не устраивает, ведь тогда нету операции помещения считывания. Сразу отправил в сервис.
Тоесть время работы это
Время формирования протокола + время отправки

1)Сформировал -отправил(1 секунда)
2)сформировал - положил-открыл-отправил(та же секунда)

в (1) как по мне решение этой проблемы
22 Borteg
 
10.10.18
12:00
(20) да и проблема это то что обращение к APi 1 секунда. 1 секунда это время ответа сервиса на отправленный ему протокол(набор протоколов)? или время подключения к нему?
23 Мыш
 
10.10.18
12:03
(20) Это хранилище в СУБД лежит. Можно через сеансовые данные попробовать, они в файле лежат где каталог сервера 1С.
24 novichok79
 
10.10.18
12:07
(22) время подключения, причем в фон это дело не отправить, будет медленнее.
25 novichok79
 
10.10.18
12:07
(23) что за сеансовые данные? не понял
26 Мыш
 
10.10.18
12:09
(25) ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)
27 novichok79
 
10.10.18
12:10
(26) данные доступны в родительском сеансе только после завершения фонового, а надо иметь доступ во время выполнения фонового, т. к. значения количества обработанных объектов надо видеть в реальном времени.
28 Мыш
 
10.10.18
12:12
(27) И следом: Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском сеансе адресу, сразу после помещения становятся недоступными в фоновом сеансе.
29 Мыш
 
10.10.18
12:13
+(28) Пул адресов закинуть. Закончились адреса, завершать фоновое и начинать новое. Выкручиваться, как обычно.
30 Tonik992
 
10.10.18
12:26
(26) Где физически хранятся данные, помещенные во временное хранилище?
31 novichok79
 
10.10.18
12:33
(30) that's the right question, my friend.
32 Cyberhawk
 
10.10.18
12:33
(28) Для обмена в реальном времени (пока ФЗ не завершено) это не подходит
33 Cyberhawk
 
10.10.18
12:37
34 Tonik992
 
10.10.18
12:42
(33) Спасибо за ссылку
35 Cyberhawk
 
10.10.18
12:45
Так что сеансовые данные, в т.ч. и временное хранилище, _всегда_ сбрасываются на диск
36 novichok79
 
10.10.18
12:46
(35) а сообщения пользаков?
37 novichok79
 
10.10.18
12:46
сообщения пользаков в фоновом сеансе - это тоже на диске?
38 Cyberhawk
 
10.10.18
12:46
(36) Конечно же никуда на диск не сбрасываются, хранятся в памяти "менеджера" сеанса, т.е. рпхоста
39 novichok79
 
10.10.18
12:48
(38) ясно, спасибо большое за технический ликбез.
40 MM
 
17.10.18
14:29
(38) Разве менеджер кластера не rmngr? Как они могут не сбрасываться на диск, если rphostы, например, запущены на разных компьютерах входящих в кластер?
41 Cyberhawk
 
17.10.18
17:14
(40)
1. Хз почему ты о менеджере кластера спрашиваешь.
2. На кластере с рабочими серверами на разных хостах не проверял.
На "обычном" сервере приложений (с одним рабочим сервером): занимаемая рпхостом память от сообщений в ФЗ пухнет, а когда клиент запрашивает эти сообщения, то начинается активность рпхоста по сети, а на диске активности никакой. После завершения ФЗ занимаемая рпхостом память, увеличенная на размер сообщений, _иногда_ уменьшается.
42 Сияющий в темноте
 
17.10.18
21:36
Я уже в другой теме говорил,потоки в обрпботчики http-запросов,и опрашивать их асинхронно,тогдп на диск ничего не попадет,и ответ будет обрабатываться сразу,как поступит.
Если операционная система семейства windows,то для двух процессов общую память можно сделать двумя путями
или проецирование файла в память(если файл не указывать, о проецируется файл подкачки),то есть,хоть это и будет общая память,но это все равно будет файл на диске.
запись из одного процесса в другой в режиме отладки(но тае обычно никто не работает).

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