Очередь или нотифьер?

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Очередь или нотифьер?

Сообщение TemkaW »

Добрый день, дорогие мои! Сегодня на работе разгорелся спор, который мы так и не разрешили, поэтому прошу помощи у вас. Сразу оговорюсь что для нас важна максимальная производительность. Итак, речь идет о передачи данных между двумя параллельными циклами. Передавать необходимо запросы в виде массива строк. Запросов может быть несколько. Поэтому и возникает вопрос:использовать очередь и помещать в элементы очереди массив строк или использовать нотифьер и помещать в него массив кластеров массивов строк? Помогите пожалуйста разобраться, уважаемые специалисты, как будет корректнее и быстрее. Спасибо.
Последний раз редактировалось TemkaW 28 фев 2012, 19:41, всего редактировалось 1 раз.
Аватара пользователя
Vasiliy Baev

Activity Gold Bronze
leader
leader
Сообщения: 545
Зарегистрирован: 31 окт 2011, 09:02
Награды: 4
Версия LabVIEW: 2019
Откуда: Санкт-Петербург
Благодарил (а): 8 раз
Поблагодарили: 10 раз
Контактная информация:

Re: Очередь или нотифьер?

Сообщение Vasiliy Baev »

TemkaW, если вам важен каждый запрос (все данные) используйте очередь. Используя уведомления, вы можете потерять данные (хранит только последнее значение).
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Vasa писал(а):TemkaW, если вам важен каждый запрос (все данные) используйте очередь. Используя уведомления, вы можете потерять данные (хранит только последнее значение).
Чтобы не терять запросы и предлагается поместить их в массив и использовать ОДИН элемент уведомления. Вопрос был в том, что будет быстрее работать. Вопрос еще открыт...
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

Re: Очередь или нотифьер?

Сообщение Aleksey Feoktistov »

Это Вы можете и сами посчитать :brows:
Попробуйте передавать по уведомителям (очередям) текущее время.
и сравнивайте значение отправленное, со временем прихода значения
Вложения
1.png
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Попробуйте передавать по уведомителям (очередям) текущее время.

Еще раз повторюсь. Запрос представляет собой массив строк. ЗапросЫ можно передавать очередью. А можно все запросЫ (массивы строк) в один массив и в нотифьер. Как корректнее и как правильнее???
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

Re: Очередь или нотифьер?

Сообщение Aleksey Feoktistov »

TemkaW, Вас не понять.
То Вы хотите быстрее, то корректнее.
Vasa, Вам уже ответила, чтопри использовании уведомителей данные могут теряться, а при использовании очередей нет!
как посчитать скорость работы уведомителей (очередей) я Вам уже написал.
Чтобы нам разобраться, приложите конкретный пример и будем думать вместе.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Очередь или нотифьер?

Сообщение AndreyDmitriev »

> Как корректнее и как правильнее???

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

С точки зрения скорости нотификаторы и очереди должны быть примерно одинаковы. Для оптимизации в любом случае имеет смысл избегать перегонки больших массивов данных (способы бывают разные - это зависит от задачи и общей архитектуры). Кроме того "медленнее" или "быстрее" - понятия относительные. В реальном времякритичном приложении обычно присутствуют ярко выраженные места, которые имеет смысл оптимизировать, и если очередь не является причиной тормозов - то не имеет смысла сразу оптимизировать это место. Слишком ранняя оптимизация — вообще вредная штука.
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Корректнее и правильнее так, как это удобнее с точки зрения архитектуры.
Я про это и спрашиваю.
очередь и нотифьер.JPG
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

Re: Очередь или нотифьер?

Сообщение Aleksey Feoktistov »

А почему так нельзя?
1.png
А так, если подумать, одномерный массив будет работать быстрее двумерного при условии одинакового количества элементов, но в данном случае я бы объединил в один кластер (или массив) и использовал бы один уведомитель (очередь)
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Количество элементов в массивах строк неодинаковое. Поэтому необходимо эти массивы упаковывать в кластеры а потом делать массив из кластеров.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Очередь или нотифьер?

Сообщение IvanLis »

TemkaW писал(а):Количество элементов в массивах строк неодинаковое. Поэтому необходимо эти массивы упаковывать в кластеры а потом делать массив из кластеров.
Вообще у Вас как-то странно команды поступают - "пачками".
Не лучше ли их по одной, последовательно в очередь писать.
И по мере обработки из очереди удалять.
Тем более команды то все равно последовательно обрабатываются и выполняются. И это уже не зависит от того каким образом они были доставлены.
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Вообще у Вас как-то странно команды поступают - "пачками".
Не лучше ли их по одной, последовательно в очередь писать.
Не лучше. Необходимо отправлять одновременно несколько команд. А в очередь они и так последовательно отправляются, как вы видете.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Очередь или нотифьер?

Сообщение IvanLis »

TemkaW писал(а):Не лучше. Необходимо отправлять одновременно несколько команд.
А в очередь они и так последовательно отправляются, как вы видете.
Если необходимо, то и отправляйте.
А то получается здесь необходимо... а здесь отправляется.

Если Вы хотели узнать как делать, то думаю Вам уже ответили.

На вопрос "что быстрее" Вам никто ответить не сможет. Т.к. это зависит от многих факторов, в том числе и передаваемых данных. Так что напишите небольшую программку, которая позволит сравнить временные характеристики различных способов передачи данных и просветите всех пользователей :wink: .
TemkaW
beginner
beginner
Сообщения: 30
Зарегистрирован: 12 апр 2010, 22:13
Версия LabVIEW: 7.1
Контактная информация:

Re: Очередь или нотифьер?

Сообщение TemkaW »

Хорошо, будем экспериментировать. Всем спасибо за помощь.
Ответить

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