LabVIEWForum.de
Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Queue verwendung in komplexer Producer/Consumer Abhängigkeit (/Thread-Queue-verwendung-in-komplexer-Producer-Consumer-Abhaengigkeit)



Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Ksanto - 03.04.2017 16:12

Hallo zusammen,

meine suche im WWW und im Forum sowie direkt bei NI und deren Foren hat leider mal wieder keine Antwort geliefert.

Ich habe eine komplexe Abhängigkeit von Producer und Consumer Schleifen, die ich gerne mit Array im Queue ihre daten unabhängig voneinander austauschen lassen will.
Nun stehe ich aber vor der Frage ob ich besser ein Queue für alles (Daten Input und Daten Output), zumindest einen Queue für jeweils Daten Input und eine für Daten Output oder gar doch einen Queue für jeden Datenaustausch von zwei schleifen untereinander verwenden sollte.


Angehängt habe ich mal ein (was-auch-immer) Diagramm, das den Ablauf zeigen soll: Zahlen oben links geben die Reihenfolge an, p(roducer)Q zu c(onsumer)Q unten links und rechts geben den weg des Datenaustausches an.
Der Ablauf fängt bei 0 an und loopt nach 3 zu 1, solange bis in einer der zweier schleifen die Abbruchbedingung erreicht wurde. cQ wird bei 0 im ersten durchgang natürlich ignoriert (oder anderweitig mit Startwerten befüllt)


Wie immer schonmal vielen Dank im Vorraus für alle die sich einen Kopf machen und ihre Erfahrungswerte mitteilen.


Viele Grüße
Ksanto


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - jg - 03.04.2017 16:30

Vielleicht hilft dir folgende Aussage:

Eine Queue ist ideal für eine N-zu-1 Abhängigkeit, soll heißen, viele dürfen schreiben (=Producer), aber nur 1 sollte bzw. darf lesen (=Consumer). Ansonsten wird es schwierig. Von dieser Warte her ist dein Ansatz extrem ungünstig, da du an mehreren Stellen aus derselben Queue auslesen willst. So müsstest du dir jedes Element erst einmal vorab anschauen und prüfen, ob das auch für die entsprechende Stelle ist, und erst danach aus der Queue entnehmen.

Gruß, Jens


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Ksanto - 03.04.2017 17:50

Hi Jens,

naja, da ich ein 1D-Array in das Queue schrieben würde wobei jeder Schleife ein Index zugewiesen wird wäre, müsste ich nicht suchen/nachschauen, da ich weiß wann, an welcher stelle ich den Wert finde. Ich würde das Array also nur aktualisieren.

Aber du würdest mir also zu variante zwei raten, was das wenn man die Schleifen von 0 bis 6 durchnummeriert:


Queue1: pQ3, pQ4, pQ5 pQ6 zu cQ0 (Alle Regelungen zu Steuerung/Wertequelle)

Queue2: pQ2, pQ3, pQ4, pQ5 pQ6 zu cQ1 (Alle Regelungen und Messung zu Auswertung)

Queue3: pQ0, pQ2 zu cQ3 (Steuerung/Wertequelle und Messung zu Regelung Luft Temp)

Queue4: pQ0, pQ2 zu cQ4 (Steuerung/Wertequelle und Messung zu Regelung Boden Temp)

Queue5: pQ0, pQ2 zu cQ5 (Steuerung/Wertequelle und Messung zu Regelung Sonne Temp)

Queue6: pQ0, pQ2 zu cQ6 (Steuerung/Wertequelle und Messung zu Regelung Humidety)




Also zum Beispiel ein Queue für alle Reglungen zur Steuerung/Wertequelle, aber 4 von Steuerung/Wertequelle zu den einzelnen Reglungen?

Update: 03.04.2017 18:58 - Ergänzung in der Erklärung.
03.04.2017 20:33 - Korrektur der Anzahl von Queues


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - GerdW - 03.04.2017 18:54

Hallo ksanto,

da würde ich doch glatt eine Verwaltungsinstanz erstellen, die alle Botschaften an die korrekten Adressen verteilt. Jeder Absender muss in der Botschaft angeben, wohin die Botschaft soll.
Andererseits könnte ich mir auch vorstellen, für diese Aufgabe mir mal die Arbeit ans Bein binden, um das ActorFramework zu verstehen…


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Ksanto - 03.04.2017 19:05

Hi Gerd,

Das sind doch mal zwei Begriffe die mich weiter bringen, warum ist es nur immer so schwer Lösungsansätze zu Problemen zu finden die man mit beschränktem Wissensstand über diese garnichts finden kann. Angel_not Ich werde mich da mal einlesen.

Wichtig dabei ist das weiterhin alle schleifen unabhängig voneinander laufen und die Producer schleifen nicht ausgebremst werden. Mals sehne also.


Danke.


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - jg - 03.04.2017 19:06

Zitat:naja, da ich ein 1D-Array in das Queue schrieben würde wobei jeder Schleife ein Index zugewiesen wird wäre, müsste ich nicht suchen/nachschauen, da ich weiß wann, an welcher stelle ich den Wert finde. Ich würde das Array also nur aktualisieren.
Bahn was willst du damit sagen? Willst du ein 1D-Array of Queue erzeugen? Willst du ein 1D-Array als Wert in eine Queue schreiben? Aber dann steht da 1 Element drin, und für wen ist es?

Zitat:Aber du würdest mir also zu variante zwei raten, was das wenn man die Schleifen von 0 bis 6 durchnummeriert:

Im Großen und Ganzen, ja: Prinzipiell langt es aber, eine Queue pro Consumer-Loop anzulegen. Der Datentyp kann dabei auch kompliziert sein, so dass man Daten von unterschiedlichen Producer-Quellen verschicken kann. Gerne wird hierbei ein Cluster aus Enum & Variant verwendet, denn in den Variant kannst du jeden Datentyp reinschieben.

Ob es sinnvoll ist, 2 Queues für dieselbe Empfänger-Schleife zu verwenden, das musst du selber entscheiden. Es mag hilfreich sein, aber das hängt von weiteren Details ab - das kann man nicht pauschal mit Ja oder Nein beantworten.

Gruß, Jens


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Ksanto - 03.04.2017 19:29

Zitat: was willst du damit sagen? Willst du ein 1D-Array of Queue erzeugen? Willst du ein 1D-Array als Wert in eine Queue schreiben? Aber dann steht da 1 Element drin, und für wen ist es?

Das mit dem 1D-Array in dem Queue war mein Ansatz einer (wie ich jetzt weiß) Verwaltungsinstanz (Zitat von IchSelbst aus einem Kommentar zu "Mehrere serielle Schnittstellen auslesen" :
Zitat: Jede der 20 VIs schreibst an seine Position egel zu welcher Zeit die gemessenen Daten rein. Und zwar immer an die selbe Stelle
). Ich hätte also den Queue auf ein Element beschränkt (das 1D-Array) und dieses immer nur aktualisiert. Aber das habe ich aus gründen schon wieder verworfen.


Zitat: Im Großen und Ganzen, ja: Prinzipiell langt es aber, eine Queue pro Consumer-Loop anzulegen.

Genau das habe ich machen/zeigen wollen, dann komme ich auf 6 stück (danke für den indirekten Hinweis ich sah den Wald vor lauter Queues nicht, ich korrigier das mal).


Ich werde mir jedenfalls jetzt erstmal das Actor Framework an und validier dann ob mir das was bringt.


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - jg - 03.04.2017 20:00

(03.04.2017 19:29 )Ksanto schrieb:  
Zitat: Im Großen und Ganzen, ja: Prinzipiell langt es aber, eine Queue pro Consumer-Loop anzulegen.

Genau das habe ich machen/zeigen wollen, dann komme ich auf 6 stück (danke für den indirekten Hinweis ich sah den Wald vor lauter Queues nicht, ich korrigier das mal).
Schleife 0 bis 6, macht mind. 7 Queues!

Gruß, Jens


RE: Queue verwendung in komplexer Producer/Consumer Abhängigkeit - Ksanto - 03.04.2017 20:14

Zitat: Schleife 0 bis 6, macht mind. 7 Queues!
Messung erhält keine Daten. (ist nur Producer) Tongue

Guck dir nochmal meine (aktualisierte) zusammengefasste Auflistung an.
Damit wäre alles abgedeckt was hin und wieder zurück muss.

Bearbeitet 03.04.2017 21:20: typo
03.04.2017 21:21: Ergänzung