Имя: Пароль:
1C
 
Поговорим об "асинхронности" клиента 1С
,
0 Mr_Best
 
13.12.18
12:52
Доброго дня уважаемые коллеги !

Кто знает как работает асинхронность клиента 1С или даст ссылочку ? Не путать с асинхронными вызовами и фоновыми заданиями. Речь исключительно о клиенте ! Т.е. о ПодключитьОбработчикОжидания и Новый ОписаниеОповещения.

Собственно, приведу пример для большего понимания:

1. Есть управляемая форма, не важно какая, пусть будет общая.
2. В ней есть реквизит типа Число, имя его "Счетчик". Реквизит отображен на форме через элемент управления "Поле ввода".
3. Есть процедура "УвеличитьСчетчик", которая делает Счетчик = Счетчик + 1
4. И мы запускаем чрез ПодключитьОбработчикОжидания 10 процедур "УвеличитьСчетчик" с интервалом в 1 секунду.
5. Вопрос, что будет в переменной Счетчик через 60 секунд ?

Дело в том, что в настоящем асинхронном программировании, результат будет не предсказуем. Что бы результат был предсказуем, реквизит "Счетчик" пришлось бы блокировать на чтение в каждом из 10 обработчиков.

1С накладывает такую блокировку ?
1 Fragster
 
гуру
13.12.18
12:53
(0) >Поговорим о "асинхронности" клиента 1С

все в порядке, её нет
2 Fragster
 
гуру
13.12.18
12:53
>Дело в том, что в настоящем асинхронном программировании, результат будет не предсказуем. Что бы результат был предсказуем, реквизит "Счетчик" пришлось бы блокировать на чтение в каждом из 10 обработчиков.

нет
3 Mr_Best
 
13.12.18
12:54
(2) что нет ?
4 Mr_Best
 
13.12.18
12:56
(2) если вы про то, что результат будет предсказуем, то вы ошибаетесь.
5 dezss
 
13.12.18
12:58
(0) в чем проблема проверить и результат сюда запостить?
6 Mr_Best
 
13.12.18
13:02
Например браузер использует тоже псевдо-асинхронность, там может выполнятся код на JS асинхронно, но любая операция с DOM-деревом будет синхронна. Т.е. если я буду расчитывать данные на клиенте 10 секунд без обращения к DOM-дереву, этот расчет будет выполнен действительно асинхронно, а когда по окончанию расчета я буду выводить данны в DOM-дерево, будет синхронный вызов. Так же, обратные вызовы в движке браузеров стоят в очереди. У меня есть понимание как работает "асинхронность" в браузере, но нет понимание как это устроено в клиенте 1с. Кто нибудь шарит ?
7 Mr_Best
 
13.12.18
13:05
(5) а если непредсказуемый результат проявит себя на 1001 итерации проверки ? а я проверю только 5 раз ...
Тут нужно понимание как работает клиент, у меня есть подозрения, что клиент работает так же как браузер. Но я не уверен, надеюсь кто нибудь знает
8 palsergeich
 
13.12.18
13:08
ОбработчикОжидания - простой таймер окна.
9 toypaul
 
гуру
13.12.18
13:12
интересно как ты собрался 10 раз обработчик запустить
10 palsergeich
 
13.12.18
13:15
Обработчик внутри одного окна уникален по имени.
11 palsergeich
 
13.12.18
13:16
если дать 10 разных имен то запросто.
12 toypaul
 
гуру
13.12.18
13:17
даже если повторить 10 разных имен, то все они друг за дружкой выполнятся
13 Сияющий в темноте
 
13.12.18
13:51
нет никакой асинхронности и паралелльного исполнения,все функции выполняются последовательно одним потоком,просто,обработчик срабатывает,когда ничего не выполняется,и пока он работает,другой не запустится.
В файловой версии для фоновых заданий сделан отдельный поток,но только для фоновых.
14 Fragster
 
гуру
13.12.18
13:54
(4) не путайте многопоточность и асинхронность
15 Сияющий в темноте
 
13.12.18
13:55
настоящая асинхронность,это когда CreateThread или Fork,чего в 1с пока нету(а очень бы хотелось)
и,вы путаете асинхронность и многопоточность,асинхронность предполагвет выполнение других действий,с котом не связанных с событием при завершении.
16 Сияющий в темноте
 
13.12.18
13:55
с кодом ...
17 H A D G E H O G s
 
13.12.18
13:59
(0) 600 будет
18 H A D G E H O G s
 
13.12.18
14:00
В многопотоке будет что угодно, но возле 600
19 H A D G E H O G s
 
13.12.18
14:00
Если пользовать мьютексы (ну или че там у вас счаст модно) - то 600
20 Mr_Best
 
13.12.18
14:04
(10) проверил))) верно
21 dezss
 
13.12.18
14:34
(0) ты не с той стороны зашел, ИМХО.
Скорей надо смотреть в сторону фоновых заданий, вот только не понятно, что именно они должны менять, так как выполняться они будут в разных областях памяти, ИМХО (изменение чего-то в базе не рассматриваем, так как там один фиг будут блокировки).
22 Mr_Best
 
13.12.18
14:35
Значит, если подвести итоги, то любое действие на клиенте, включая ВнешнееСобытие будет становится в очередь и обрабатыватся последовательно.

Т.е. другими словами, движок клиента 1с работает аналогично движку любого браузера.
23 Сияющий в темноте
 
13.12.18
18:24
Как и любая другая программа с одним основным потоком.
24 palsergeich
 
13.12.18
19:15
(12) Совершенно верно, поток то один.
Но таймеров может быть много.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn