Имя: Пароль:
1C
1С v8
Асинх и Ждать точно работают, как должны?
0 Абоба
 
14.10.22
13:29
Пытаюсь запустить параллельное выполнение кода, но никакой параллельности нет. Что я делаю не так?

&НаКлиенте
Асинх Процедура Команда(Команда)
    
    рекв1 = ТекущаяДата();
    
    об2 = Счет(5);
    об3 = Счет(5);

    рекв2 = Ждать об2;
    рекв3 = Ждать об3;
    
КонецПроцедуры

&НаКлиенте
Асинх Функция Счет(Множ)
    М = 0;
    Для Й = 0 по Множ * 1000000 цикл
        М = Й;
    КонецЦикла;
    Возврат Строка( ТекущаяДата() );
КонецФункции
1 Garykom
 
гуру
14.10.22
13:32
В 1С параллельность есть в фоновых заданиях

И да асинхронность != параллельность
2 Мультук
 
гуру
14.10.22
13:38
(0)

Вот тут человек объясняет, а зачем это {асинх ждать} вообще было сделано и почему этот "синтаксический сахар" более сладкий.

https://www.youtube.com/watch?v=vt1aoPXx9fY
3 Абоба
 
14.10.22
13:41
(1) То есть эти конструкции не дают никакой параллельности, как в шарпе, например?
4 Абоба
 
14.10.22
13:43
(2) Смотрел, но как-то не понял. Особенно смутил момент с ассемблером, что получился какой-то слишком простой код.
5 Garykom
 
гуру
14.10.22
13:45
(3) да модель асинхронности ближе к NodeJS
6 ДедМорроз
 
14.10.22
23:55
Асинхронность - это не параллельность,а возможность не ждать результата длительной операции,а выполнить какие-то действия.
Но,пока выполняется код,никакое оповещение не сработает,все они будут ждать окончания выполнения.

Если хочется какую-то имитацию параллельности на клиенте,то просто делает обработчик ожидания и по кусочкам выполняем действия,чтобы не мешать работе интерфейса.
На сервере же есть фоновые задания - вот там реальная параллельность и независимость.
7 Fram
 
15.10.22
12:42
(5) в ноде есть Promise.All() для параллельного выполнения
8 Garykom
 
гуру
15.10.22
12:49
(7) когда появилось?

имхо в 1С отказ от синхронности и модальности произошел для запуска веб-клиента в браузере
а там JS поэтому модель с нее слизали или под нее сваяли
9 ДедМорроз
 
15.10.22
14:29
Отказ от модальности в браузерах произошел тогда,когда решили отказаться от открытия окон,а использовать вкладки.
И он никак не связан с асинхронностью.
Асинхронность появилась в том же браузере,так как там множество операций выполняются в режиме начало-уведомление.
А уже асинхронное процедуры действительно копировали с javascript,так как в брвузере они как раз в него переводятся.
10 Garykom
 
гуру
15.10.22
14:46
(9) Модальность с асинхронностью только теоретически не связана.
Практически же модальный показ окон это чистейшая синхронность, код дальше после открытия модальной формы не продолжается, пока модальную форму не закроют.
11 NorthWind
 
15.10.22
15:19
(10) ... это верно только для приложения с одним тредом. Вообще в той же винде это изначально было решено многопоточностью. Тот поток где открыли окно (обычно главный поток приложения) - тот да, стоит и ждет. Но остальные вполне себе выполняются, если они есть.
12 Fram
 
15.10.22
17:10
(8) всегда вроде было
13 ДедМорроз
 
15.10.22
19:48
(11) В windows,на самом деле,никакой модальности не было.
Функция DialogBox,на самом деле,открывала еще один цикл очереди сообщений,просто фильтруя их по открытому окну.
Остальные окна жили,но не согли получить сообщения,не считая прямых вызовов SendMessage.
Опять же,основной цикл сообщений висел на вызове DispaychMessage,то есть использовался стек и повторный вызов очереди.
Соответственно,закрытие диалоглвого окна просто разрывало цикл,и процесс выходил на основной.

В 1С модальный диалог работает примерно по тому же принципу.
Опять же,при создании любого прикладного объекта,имеющего модуль,выполняется инициализация этого модуля.
Что,собственно говоря,вполне понятно.
Просто,в браузере на клиенте так нельзя,там javascript нельзя остановить на каком-то вызове и продолжить.
14 ДедМорроз
 
15.10.22
19:53
Асинхронность же живет внутри любой операционной системы,так как любому оборудованию мы передаем команду,а оно нас потом уведомляет об исполнении через прерывание.
И когда на нескольких ядрах (а раньше на одном) исполняется множество процессов,то переключение с одного на другой происходит также через прерывание.
Поэтому,никакой реальной сложности в многопоточности нет,а в современных браузерах даже появились фоновые исполнители.
Почему,при этом,клиент остается с одним основным потоком - вопрос открытый.
Тем более,что даже библиотеки времени выполнения создают служебные потоки.