Странное торможение параллельных потоков

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение dadreamer »

Blackman писал(а):В вложенном VI не менее странное поведение Event Structure.
1. Генерация User Event симулирует Mouse Scroll Event, которое как бы еще не было доступно в 2012.
2. User Event зарегистрировано Event Structure.
3. Обработчика User Event в явном виде нет.
LabVIEW 2013 Bug Fixes:
NI писал(а):Non-handled, registered dynamic events reset the event structure timeout
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Странный артефакт с колесом мыши

Сообщение Blackman »

dadreamer, cпасибо за подсказку.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Artem.spb - в том примере, что вы дали (Parallel3) значения в контролах считываются 1 раз, до цикла. А как тогда сделать, чтобы считало с текущими значениями? (признаться, ещё не работал с queue).
Последний раз редактировалось Boris_K 17 май 2016, 20:26, всего редактировалось 1 раз.
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Boris_K писал(а):Artem.spb - в том примере, что вы дали (Parallel3) значения в контролах считываются 1 раз, до цикла. А как тогда сделать, чтобы считало с текущими значениями? (признаться, не до конца ещё понял, как работает queue).
Завести управляющую очередь в обратную сторону.
Управляющие команды посылать только когда нужно, т.е. при изменении значений контролов.
Очередь она и есть очередь. первый встал в очередь, первый из неё вышел. Кассир решил покурить, вся очередь стоит, но при этом новые покупатели поступают с прежней скоростью. Если покупателей нет (очередь пустая), продавец ждёт, пока не придут.
У очереди может быт только один получатель (продавец), но много постановщиков. Конечно, никто не запрещает делать несколько получателей, но как только кто-то из них возьмёт элемент из очереди, он оттуда удаляется и остальные получатели ничего не получат. Поэтому по этой же очереди отправлять команды обратно не прокатит.
Ну и тип данных надо подбирать под вашу задачу.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Так чтобы распараллеливание действительно работало, обходя этот глюк с колесом, получается надо каждый поток (цикл) в отдельный :vi: выносить? Оно ведь всегда работало и в пределах одного :vi: , разные циклы крутились со своей скоростью. Вот только этот глюк с колесом тормозит все циклы в :vi: . :crazy: Странное поведение.
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

ими сейчас ничто не мешает крутиться параллельно
Untitled-1.png
но
во-первых, запихать разные потоки и в отдельные subvi гораздо удобнее, чем нарисовать простыню на несколько экранов скрола по обоим измерениям.
во-вторых, цикл тормозит, потому что там есть взаимодействие с интерфейсом. если его убрать, то тормоза уходят.
ну и в третьих, это нормально: один поток интерфейсом занимается, другой с железом общается, третий ещё что-нибудь делает.
и наконец, отдельным :vi: можно назначить повышенный приоритет, даже если основной будет с обычным.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

во-вторых, цикл тормозит, потому что там есть взаимодействие с интерфейсом. если его убрать, то тормоза уходят.
взаимодействие с интерфейсом - это значит что там есть хотя-бы один терминал (контрола/индикатора)? А если вместо него будет локальная переменная например?
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Хоть prop node, хоть локальная.
Это всё равно обращение к элементу на FP.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

И какой тогда будет самый удобный способ передать информацию между потоками, чтобы не взаимодействовать с интерфейсом? Лок. переменные нельзя. Очередь - оптимально?

А здесь писали, что очередь не подойдёт если циклы асинхронные, то есть работающие каждый со своей частотой: http://labviewportal.org/viewtopic.php?p=62701#p62701
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Я успешно создаю асинхронные циклы при необходимости. Вопрос в том, что и зачем передавать между циклами.
В простейшем случае из одного цикла данные поступаю регулярно и получатель ждёт элемент из очереди (как в примере, таймаут бесконечный).
Из второго цикла команды поступаю только по мере необходимости, получатель не ждёт элемента, если очередь пустая, то выполняется обычное действие, если поступила команда, обрабатывается она. Таймаут нулевой или минимальный, задающий период работы цикла.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Странный артефакт с колесом мыши

Сообщение Blackman »

А здесь писали, что очередь не подойдёт если циклы асинхронные, то есть работающие каждый со своей частотой
Аргументов подтверждающих это утверждение никаких нет.
Именно асинхронность потоков (в смысле работающих с разной частотой) позволяет оптимизировать работу приложения в целом.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Вопрос в том, что и зачем передавать между циклами.
Информацию для расчёта, а обратно - результаты.
Именно асинхронность потоков (в смысле работающих с разной частотой) позволяет оптимизировать работу приложения в целом.
Абсолютно солидарен. Многопоточность же для этого и придумана, чтобы разные алгоритмы работали параллельно, и медленный не тормозил быстрый. Иначе не было бы смысла во всех этих очередях, насколько я понимаю.
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Boris_K писал(а):
Вопрос в том, что и зачем передавать между циклами.
Информацию для расчёта, а обратно - результаты.
общий случай я уже описал
Artem.spb писал(а): В простейшем случае из одного цикла данные поступаю регулярно и получатель ждёт элемент из очереди (как в примере, таймаут бесконечный).
Из второго цикла команды поступаю только по мере необходимости, получатель не ждёт элемента. Если очередь пустая, то выполняется обычное действие, если поступила команда, обрабатывается она. Таймаут нулевой или минимальный, задающий период работы цикла.
q.png
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Как оказалось, тут дело в чём-то другом, то есть не во взаимодействии с фронт-панелью. Я в проекте сделал пробный цикл (в параллель к имеющимся), тоже вывел индикатор его текущей итерации. И вот этот цикл притормаживать заставить ну никак не удалось! Несмотря на то, что он взаимодействует с фронт-панелью (выводит индикатор текущей итерации). Вначале цикл был пустой, потом добавил туда лок. переменных, потом плюс нагрузил его расчётами - и при вращении колеса тормозило только отображение в индикаторе, а само значение увеличивалось с прежним темпом. В то время как остальные циклы притормаживались (как и писал выше). Можно попробовать и на том примере, что дал.

Описанный в теме симптом появляется не только при прокручивании фронт-панели. Например, также тормозит когда двигаешь график курсором (отключив фиксацию по осям), вплоть до полной остановки цикла, пока быстро двигаешь график. Независимо от объёма отображаемых данных. Это, конечно, тоже радости не добавило. Подвигает юзер график - и затормозит параллельные потоки, которые нельзя тормозить :cry:

Самое главное, что я не могу понять, чего нет в этом пробном цикле, что есть в других, что вызывает описанное явление в них :dntknw:
Race conditions - опасный и скользкий баг!
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Странное торможение параллельных потоков

Сообщение Blackman »

Все описанные случаи (прокрутка Scrollbar, вращение колеса, перемещение графика курсорами) так или иначе связаны с манипуляциями мышью.
Если нет прямых видимых кусков кода взаимодействия с мышью, может быть они спрятаны в subVI?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»