INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Resourcen schonende Kommunikation



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

06.04.2020, 18:24 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2020 18:25 von LV-New.)
Beitrag #11

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Okay, habe es verstanden auch wenn es mit Ereignis gehen würde Abstand davon nehmen....
Wie sieht es nun mit der Queue aus, ist dies "das Gelbe vom EI"? Was muss hier evtl. beachtet werden?
(Außer dass es nach meiner Ansicht etwas unübersichtlicher ist, aber dafür kam ja bereits der gute Hinweiß mit den Clustern.)

Irgendwo habe ich mal gelesen, dass Queues langsamer sein sollen als FGV?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.04.2020, 09:16
Beitrag #12

kpa Offline
LVF-Stammgast
***


Beiträge: 385
Registriert seit: Mar 2007

2019
2002
DE

88***
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New,

um das Blockdiagramm übersichtlicher zu machen kannnst Du lokale Variablen verwenden.
LV2018
   

Wenn Du in den Beispielen nach Queue suchst findest Du zB: "Channel Basics.lvproj", dort wird erklärt wie Datenaustausch zwischen parallelen Schleifen auch noch gehandhabt werden kann.

Grüße

kpa


Angehängte Datei(en)
18.0 .vi  Queue1.vi (Größe: 17,7 KB / Downloads: 211)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 09:19
Beitrag #13

GerdW Offline
______________
LVF-Team

Beiträge: 17.470
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo kpa,

du willst allen Ernstes ein Beispiel mit einer klaren Racecondition empfehlen?
Sonicht

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 09:45 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2020 12:06 von kpa.)
Beitrag #14

kpa Offline
LVF-Stammgast
***


Beiträge: 385
Registriert seit: Mar 2007

2019
2002
DE

88***
Deutschland
RE: Resourcen schonende Kommunikation
Hallo GerdW,

Raceconditions treten auf wenn veränderbare Variablen von verschiedenen Prozessen geschrieben oder gelesen werden und der Zeitpunkt des Lesens andere Werte ergeben kann. In meinem Beispiel wird die lokale Variable einmal geschrieben und nicht mehr verändert. Jedes Lesen dieser lokalen Variable ergibt den gleichen Wert. Hier kann keine Racecondition auftreten.

Grüße

kpa

edit:

Die Racecondition auf die die zwei nachfolgenden Schreiber hinweisen habe ich nachträglich durch einen Sequenzrahmen beseitigt.

LV2018


   


Angehängte Datei(en)
18.0 .vi  Queue2.vi (Größe: 17,97 KB / Downloads: 217)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 09:56 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2020 09:58 von th13.)
Beitrag #15

th13 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 177
Registriert seit: Oct 2013

2020 SP1
2013
EN


Deutschland
RE: Resourcen schonende Kommunikation
LabVIEW neigt dazu, lokale Variablen sehr frühzeitig zu lesen. In deinem Beispiel kann es vorkommen, dass die lokale Variable QueueDBL beim ReleaseQueue gelesen wird, bevor ObtainQueue ausgeführt wird. Muss nicht passieren, kann aber. Daher immer vermeiden.

Was passiert, wenn der Code mal wächst, und QueueDBL erst später beschrieben wird?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 09:56 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2020 09:57 von GerdW.)
Beitrag #16

GerdW Offline
______________
LVF-Team

Beiträge: 17.470
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo kpa,

Zitat:Hier kann keine Racecondition auftreten.
Dann überlege mal, ob ObtainQueue die Referenz schneller in der "Variablen" ablegt, als sie bei ReleaseQueue ausgelesen wird!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 10:23
Beitrag #17

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Hi,
bin nun auf die nächste Herausforderungen gestoßen...

Ausgangszenario:
Ich habe im aktuellen Beispiel 3 Schleifen:
1. Schleife erzeugt Daten und soll Sie an die 2 anderen Schleifen senden.
Beide Schleifen sollen jeweils die Daten aus der 1. Schleife lesen. Die Schleifen laufen unterschiedlich schnell und kann auch nicht gesagt werden welche von den beiden Schleifen zuerst auf die Daten zugreift. Nach dem Lesen kann die Queue geleert werden nicht gelöscht da für nächsten Durchlauf gebraucht....

Wie kann ich also sicherstellen dass die Daten bei beiden ankommen und die Queue aber auch nicht übermässig groß wird?
Gibt es da eine Lösung, außer evtl. 2 Queues bzw. die Daten von der einen auf die andere Schleife dann weiterzugeben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 10:33
Beitrag #18

GerdW Offline
______________
LVF-Team

Beiträge: 17.470
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New,

eine Queue folgt dem Prinzip "mehrere Erzeuger, ein Consumer": wenn du zwei Consumer hast und beide alle Daten bekommen sollen, benötigst du zwei Queues.

(Man kann durchaus mehrere Consumer eine Queue leeren lassen, dann bekommt aber nicht jeder Consumer alle Daten…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 10:46
Beitrag #19

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Hatte ich befürchtet :-(
Aber kann das untere VI eine Lösung sein, solange wie die Erzeugerschleife langsamer ist als die Leseschleifen?
Oder habe ich was übersehen....?


Angehängte Datei(en)
16.0 .vi  Communication with queuex.vi (Größe: 13,98 KB / Downloads: 221)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 11:00 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2020 11:01 von GerdW.)
Beitrag #20

GerdW Offline
______________
LVF-Team

Beiträge: 17.470
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New,

Zitat:Aber kann das untere VI eine Lösung sein, solange wie die Erzeugerschleife langsamer ist als die Leseschleifen?
Also "Lösung" würde ich das nicht nennen…
Um sicherzustellen, dass beide Consumer die Daten bekommen, verwendest du jeweils QueuePreview…
Um sicherzustellen, dass beide Consumer den richtigen Wert lesen, verwendest du EnqueueOppositeEnd…
Um sicherzustellen, dass die Queue nicht den gesamten Speicher belegt, verwendest du QueueFlush…
Und du musst auch noch sicherstellen, dass der Producer langsamer läuft als die Consumer…

Insgesamt ein sehr wackliges Konstrukt!

Nimm doch einfach zwei Queues! Oder einen Notifier, solange der Producer so langsam läuft…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: