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

Поговорим об "асинхронности" клиента 1С

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

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

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

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

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

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

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

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

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


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