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