Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

1с передача данных между фоновыми заданиями в оперативной памяти?

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует