Threads, Aufrufe, Reihenfolge

Hallo,

habe ein paar Fragen zur Ablaufsteuerung in IPS - ich denke, dass das nur von den Programmierern von IPS beantwortet werden kann:

1.) Was geschieht eigentlich, wenn ein IPS_RunXXX auszuführen wäre, aber gerade alle Threads belegt (und ggf sogar für einige Zeit blockiert) sind?

Ich nehme an, dass der Befehl dann ausgeführt wird, wenn ein Slot frei wird?

Falls ja: Wie kann man die Verzögerung feststellen? Gibt es da irgendeine IPS-Variable (was sinnvoll wäre)?

2.) Wie wird der - zugegeben relativ unwahrschelinliche aber eben doch mögliche - Fall gehandelt, dass zwei Scripte ZEITGLEICH die Anweisung „IPS_RunScriptXXX“ auf dieselbe (oder unterschiedliche) ID abarbeiten?

3.) Wie ist 2.) zu beantworten, wenn 1.) gerade zusätzlich eintritt?

Danke für Antworten
jwka

Interessante und in größeren Umgebungen bestimmt nicht unmögliche Fragen.

  1. Kann man denn die Anzahl der Threads erweitern ???

4.) ja, das geht. In der Settings ist ein entsprechender Eintrag. Wurde hier schon an einigen Stellen diskutiert. Auch der Speicherbedarf je Thread ist da irgendwo zu finden.

  1. Es gibt eine Queue und nein, an die kommt man nicht ran. Niemals.
  2. Wo soll das Problem sein? Es steht in deiner Verantwortung, ob soetwas passieren kann oder nicht. IP-Symcon ist völlig egal was wann passiert.
  3. Verstehe ich nicht, aber IP-Symcon kommt ganz sicher damit klar. Wie schonmal vorher gesagt… Du solltest dir die Thematik Parallelität und Nebenläufigkeit genauer ansehen…

paresy

Na, wichtig ist mir ja erstmal, dass sicher keinesfalls ein „Run“ verloren geht.

Und ein „Chain-Request“ stellt ihr ja offenbar nicht zur Verfügung usd habt das auch - Deiner Antwort zu Folge- auch nicht vor. SChade, denn sonst könnte man ein Request stellen, ob ein Script bereits läuft, statt die ganze Semaphor-Arie zu programmieren.

Wenn ich mich um alles (incl. Run lief nicht) kümmern müsste, dann wäre IPS lediglich ein besserer Treiberverwalter. Ein bischen mehr darf man von IPS, meine ich, schon erwarten.

Sollte man wirklich den Worstcase im Script selbst abfangen müssen, wäre kein einziges Script das ich bisher hier - inclusive der Doku ! - gesehen habe, tauglich für den Real-Einsatz, denn ich habe bisher keinerlei Semaphor-Aktionen für Scriptabläufe gesehen. Meist wird sogar bei der asynchronen Kommunikation (siehe viele Socket-Scripte) solches nicht ansatzweise einmal berücksichtigt.

Ich glaube, dass viele der User davon ausgehen, dass IPS das alles handlet und „verhindert“.

Gerade „2“ kann doch in jeder Umgebung im Prinzip jederzeit passieren und man hat kaum eine Chance das wirklich zu verhindern. Sonst dürften keine zwei Schalter dieselben Scripte bzw. Script-Batches verwenden. Allein durch die Laufzeit-Unterschiede kann m.E. das jederzeit vorkommen.

Ich frag halt. Das ist wahrscheinlich der einzige Unterschied.

Und wenn man nicht mal Werkzeuge zur Verfügung bekommt, bestimmte Dinge abzufragen, klingt


Es steht in deiner Verantwortung, ob soetwas passieren kann oder nicht. IP-Symcon ist völlig egal was wann passiert.

ein bischen verhöhnend … aber das kommt ja immer mal wieder vor …

Zu 3.):
Wenn der Hersteller keine Doku zu dem Thema gibt, man also gar nicht weiss, wie es das System handhabt, nutzt auch ein Auseinsndersetzen mit Theorien nichts.

jwka

Hmm… Danke für die Blumen :slight_smile:

IP-Symcon verwaltet sehr viel und du brauchst in den wenigsten Fällen Semaphoren… In meinem IPS habe ich, soweit ich weiß, es nur zwei mal genutzt. Alles andere erstelle ich lieber nach dem KISS Prinzip. Wenn du aber selber über RunSkript dir solche „Probleme“ erzeugst, hat dies nichts mehr mit IP-Symcon zu tun, sondern dann bist du der Programmierer, der an die Regeln von Multi-Threading gebunden ist. Für 95% der User ist auch die RunSkript Methode völlig unproblematisch. Und für die 5% die ggf. ein Problem damit erzeugen, sind die „zufälligen Fehler“ unkritisch, sie beheben Sie mit unserer Hilfe, oder Sie wissen hoffentlich vorher, dass so etwas auftreten kann. (Thema: Parallelität und Nebenläufigkeit).

Ich kann dir sagen, dass IP-Symcon vollkommen threadsafe ist. Alles was nicht thradsafe ist, hast du gebaut. Und was du gebaut hast, ist außerhalb von dem was IP-Symcon beeinflussen kann und will. Und der einzige Bereich innerhalb von IP-Symcon in dem deine Frage relevant ist und von der du behauptest, dass sie undokumentiert ist (Sockets), ist übrigens genau in der Doku erwähnt.
Zitat: http://www.ip-symcon.de/service/dokumentation/modulreferenz/registervariable/

Die Ausführung der Skripte erfolgt seriell. Das Bedeutet, dass Sie ihre Skripte nicht mit Semaphoren schützen müssen.

paresy

PS: Hättest du eigentlich mal Lust im ProjectShowCase vorzustellen was du mit IP-Symcon genau realisiert? Wenn du entsprechende Frameworks ect. für größere Gebäudekomplexe hast, könnten wir ja entsprechende Kundenanfragen an dich weiterleiten, falls dort Interesse besteht?

Paresy:

Ich glaube nicht, dass das, was ich mache / machen will, in irgendeiner Form über das hinaus geht, was andere hier tun. Wenn ich dann mal durch bin, was durchaus noch einige Zeit dauern kann, werde ich sicher mal was vorstellen.

Vielleicht unterscheide ich mich in drei Punkten von einigen anderen Usern hier (was nicht negativ gemeint ist und auch nicht heissen soll, dass nicht auch andere „so ticken“):

1.)Gehöre ich (leider) zu den Leuten, die keine 5 Minuten an irgendeinem Programm/Produkt sitzen und schon erste Fehler finden. In meiner Company früher haben die Programmierer immer gewettet, wie lange es dauert, bis ich nen Fehler finde, wenn es um die Demo neuer Funktionen ging.

Das ist keine Boshaftigkeit sondern wirkliches Pech und reicht in alle Bereiche. Mein Dienstwagen E-Klasse hatte z.B. im Peak 16 Fehler gleichzeitig, davon 7 Softwarefehler. In den zur Verfügung gestellten Demo Systemen meines HiFi Herstellers waren 3 von 6 Geräte Fehlerhaft.

Da wirst Du sensibel, wenn es darum geht, „bullet proof“ Anwendungen zu schreiben.

2.) Ich will das IPS System auch in unseren Domotik Projekten einsetzen. Das sind i.d.R. große Objekte, Villen etc. mit sehr vielen Aktore, Schaltern und Automaik-Prozessen und nicht selten entsprechend großen Auftragsvolumen.

Solche Kunden sind „Extrem-WAF-unfreundlich“. Da das dann Kundeninstallationen sind, ist es eben nicht egal, wenn „mal was nicht tut“. Im gegenteil, das sind es gerade die sporadischen Fehler, die Dich umbringen.

Und: Da kann man nicht mal eben ein Script ändern, denn die Installation ist im Zweifel mehrere Stunden Anreise incl. Flug weg, und die Netzwerk-Administration wird von einer Security Firma gemacht, die so gnadenlos kurz gehalten ist, dass auch via Fernwartung nix geht.

3.) Ich möchte Dinge, die ich tue „ganz“ beherrschen / verstehen. Und daher sind meine Fragen hie und da vielleicht ein bischen tiefschürfender.

Da diese Frage m.E. nicht ausreichend klar beantwortet wurde, stelle ich sie nochmals:

Egal, wie viele Scripte parallel und zu welchen ungeschickten Zeiten auch immer laufen und IPS_RunXXX absetzen, es ist gewährleistet, dass alle aufgrufenen Scripte in der zeitlichen Reihenfolge des Aufrufs (wenn es die gibt, bei zeitgleichen Aufrufen zufällig sequentiell???) abgearbeitet werden?

Danke
jwka

Egal, wie viele Scripte parallel und zu welchen ungeschickten Zeiten auch immer laufen und IPS_RunXXX absetzen, es ist gewährleistet, dass alle aufgrufenen Scripte in der zeitlichen Reihenfolge des Aufrufs (wenn es die gibt, bei zeitgleichen Aufrufen zufällig sequentiell???) abgearbeitet werden?

Korrekt. Darauf kannst du dich verlassen. :slight_smile:

paresy

Na, das ist doch ne schöne und klare Aussage!

Danke.
jwka

Nun wäre noch die Frage nach dem zeitgleichen Schreiben von Daten bzw. Objekt-Eigenschaften:

Wie sieht es aus, wenn zwei Scripte tatsächlich zeitgleich ( was immer das in IPS auch bedeutet) auf dasselbe Objekt schreibend zugreifen.

Kollission? Ist dann der zurückgegebene Wert der entsprechenden Funktionen === false?

Oder „handlet“ IPS das und schreibt einfach einen von beiden Werten nach dem anderen?

Gilt das gleichermassen für alle Objekteigenschaften (Werte, Namen, Info, Timerwerte etc.)?

Danke vorab.
jwka

Edit:

ich frage das, weil ich bislang noch keine Kollissionen hingekriegt habe, aber das das erste sein wird, wenn ich was Live gebe und zur Tür draussen bin, was bei einem Kunden auftritt.

Es wird dann hintereinander ausgeführt. Diese Aussage gilt für jede IPS Funktion.

paresy

Sehr benutzerfreundlich (im Sinne: für Endanwender) gemacht!

Danke.

Auf die Gefahr, dass ich nerve:

WANN kann denn dann eigentlich ein „false“ z.B. bei SetValue() kommen? Doch nur, wenn das Objekt nicht existiert, oder gibt es weitere Fälle?

Nochmals Danke.
jwka