Registervariable erzeugt zu viele Threads

Ich habe ein IO-Modul, welches per USB-Serial Daten im json-Format an Symcon unter Windows sendet. Dabei hatte ich schon länger das rätselhafte Phänomen, dass manchmal einzelne Zeichen der Datenübertragung fehlen.

Jetzt ist es mir neulich wie Schuppen von den Augen gefallen, mal zu gucken, wie viele Threads das Handlerskript der RegVar aufmacht… Antwort: sehr viele, mitunter wohl zu viele.

Das Skript macht erstmal nicht viel, es hängt die empfangenen Daten an den Puffer an und guckt mit strpos(), ob in dem String ein „}“ vorkommt, bevor es sonstige „rechenintensivere“ Stringoperationen durchführt und json_decode anwendet. Trotzdem „explodiert“ im Moment des Datenempfangs (wir reden hier von einem simplen Json-Objekt mit vielleicht 7 Int-/String-Properties) die Threadanzahl für das Skript für einen Sekundenbruchteil.

Das passiert wohl bei mehreren solchen IO-Boxen (Hardware bspw. Controllino), egal ob sie per Ehternet oder per USB angebunden sind.

Ich nehme an, Cutter sind genau dafür da? (Habe ich all die Jahre nie benutzt :o )

Oder erzeugen die auch Threads intern?

Nein, der Cutter ist super um Daten erstmal zu „sammlen“.

paresy

Danke, macht einen Riesenunterschied.

Aber mal angenommen, ich hätte einen nicht trivial zu parsenden Datenstrom, für den ein Cutter nicht geeignet wäre - könnte ich dann irgendwie das Erstellen zu vieler Threads verhindern?

Nicht wirklich. Du willst die Daten ja auswerten so wie sie kommen.

Aber da es normalerweise immer Zeichen gibt, an denen man synchronisieren kann, sollte der Cutter immer gute Dienste tun.

paresy