Queue vs CVT

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Queue vs CVT

Сообщение jane_wild »

Доброго здравия всем!
Озадачилась я вопросом, что более эффективно использовать, в плане производительности, при передаче большого количества данных - очередь или CVT?
Работу с очередями я более - менее освоила. Но вот в новом проекте хотела бы попробoвать CVT (Current Value Table). В котором предпологается использовать cDAQ c тремя NI 9205 по 32 канала каждый, т.е. достаточно объемное манипулирование данными (передача между разными потоками)...
Мои текущие проекты с очередями.... значит получила я 2D массив (непрерывный сбор данных) с Read VI "запихнула" в три очереди, одну где рисуется график, другую где происходит анализ и вывод значений на индикаторы и третью где... Суть не в этом. Я подумала может имеет смысл, после получения данных из Read VI, один раз записать в таблицу (CVT), а в других потоках читать из этой таблицы, в моем понимании, такая модель будет более эффективной, или я не права? Собственно вопрос озвучен в заголовке темы - Очередь против Таблицы - кто кого? Хотелось бы услышать Ваше мнение. Спасибо.

PS. О CVT знания достаточно поверхностные, вот и думаю стоит ли тратить время на изучение...
Artem.spb

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

Re: Queue vs CVT

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

"я пастернака не читал, но скажу"...

The CVT is based on functional global variables
на мой поверхностный взгляд в плане производительности существенной разницы не будет кроме одного: спор из-за доступа. Т.к. это одно хранилище, то все будут получать к нему доступ по-очереди, а не "одновременно".
В плане получения данных с оборудования, опять же imho, логичнее использовать очереди, т.к. обработчик стартанёт сразу после получения новой порции, а в остальное время будет просто отдыхать. А в случае CVT придётся проверять, есть ли новые данные немного чаще, чем они туда реально поступают (чтобы не пропустить). Зачем тратить на это ресурсы?
Если же пропуски в данных не страшны, то можно и с CVT заморочиться
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Queue vs CVT

Сообщение jane_wild »

Я Пастернака тоже не читала :haha: , и знала что они базируются на FGV, но почему то о пропусках данных не подумала, а Вы указали мне на это - Спасибо.
CVT придётся проверять, есть ли новые данные немного чаще, чем они туда реально поступают (чтобы не пропустить)
Т.е. вероятнось пропуска новой записи есть, если интервал времени чтения из таблицы у читающих циклов одинаковый либо больше интервала записывающего цикла (либо ввиду каких то задержек при обработке/отрисовке).
В моем случае это критично, значит "отбой тревоги" - будем применять очереди.
Ответить

Вернуться в «Модели программирования»