callback auf funktion außerhalb des scopes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

snafu hat geschrieben:Wobei mir das immer noch zu sehr Java wäre. Warum nicht einfach Funktionen verwenden?
Im vorliegenden Fall wurde das mit Funktionen oder Methoden gemacht. Das ist aber nicht immer sinnvoll. Ich hatte nämlich auch mal so etwas gemacht mit Empfang, Verarbeitung und Speichern. Dabei konnte man auch etwa Videodateien - auch 2 GB kein Problem - vom PC auf das Smartphone übertragen. Klar dass man vom PC keine Funktion auf dem Smartphone aufrufen kann. Ebenso aber hatte ich die Software in Threads aufgegliedert. Der Empfang soll ja nicht zuerst die Videodatei in den Hauptspeicher schreiben - außerdem hat mein Smartphone eh nicht soviel -, während die anderen warten. Und wenn dann die Daten in ein File geschrieben werden, soll natürlich der Empfang nicht warten. Daher schrieb der Empfang die Daten in eine Queue und triggerte dann die Verarbeitung. Der Empfang schrieb dann weiter in die Queue bis zu einer Obergrenze und legte sich dann schlafen. Bei Erreichung einer Untergrenze in der Queue wurde der Empfang dann wieder aufgeweckt und forderte weitere Daten vom PC an. Natürlich wurde auch da nicht erst angefangen, wieder aus einer Datei zu lesen, sondern auch da war man nicht untätig und hatte die Daten bereits in einer Queue gebuffert. Alle Komponenten sollten arbeiten, wenn es was zu tun gab und auf andere sollte dabei nicht gewartet werden, damit das System optimal läuft.

Und bei Threads ruft man nicht einfach Funktionen in anderen Threads auf. Daher einfach Message gesandt. Und die triggerte dann das Event im anderen Thread. Da brauchte man dann gar nicht extra ein Eventhandling programmieren, das das bereits im Eventbroker integriert war.

Also: Callbackaufruf auf einem Tablet in China bekommt man mit Funktionsaufruf einfach nicht hin.
Zuletzt geändert von Alfons Mittelmeyer am Freitag 1. September 2017, 20:40, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: was hat jetzt dieser Beitrag, dass Du auch bei anderen Problemen viel zu komplizierte Lösungen hast, mit dem eigentlichen Thema zu tun?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:@Alfons Mittelmeyer: was hat jetzt dieser Beitrag, dass Du auch bei anderen Problemen viel zu komplizierte Lösungen hast, mit dem eigentlichen Thema zu tun?
Es hat damit etwas zu tun, dass die Software in nur einem Thread zu haben, nicht immer eine optimale Lösung ist. Mit Messages ist man auch davon unabhängig.

Und außerdem war das keine komplizierte Lösung, die ich geschildert hatte sondern eine optimale. Ein schlechte Lösung ist in manchen Fällen, wenn der Empfang nicht empfangen kann, während die Daten gespeichert werden.

Es kommt eben darauf an, um welche Daten es sich handelt und was damit geschehen soll. Ist es ein Temperaturwert von einem Thermometer Nullo Problemo. Ist es ein Gigabyte und soll das kompiliert werden mit einer Compilierzeit von 30 Stunden, dann sieht es ganz anders aus.
chwin
User
Beiträge: 16
Registriert: Freitag 4. Juli 2014, 15:07

Hallo

ich muss zugeben, Eure Diskussion ist recht weit außerhalb meines Verständnisbereichs, daher gehe ich da auch nicht drauf ein.
Evtl hilft Euch ja die genauere Beschreibung meines Problems Euch auf den "richtigen" Weg zu einigen :D

Bei meiner Anwendung geht es um Fileserver, die ich betreue.

Wir haben inzwischen so viele Files, das ein Treewalk um die Daten die zu sichern sind zu identifizieren nicht mehr funktioniert. Die Laufzeit eines Treewalks liegt bei etwa 30h. Wir sprechen hier von 350+Mio Files. Meine Aufgabe ist es das Backup sicherzustellen.

Also hatte ich mir überlegt, das der Filer ja eine Debug Schnittstelle hat, über die ich alle Filesystem Events bekomme hat.

Ich protokolliere alle Filezugriffe mit, führe in einer Datenbank ein virtuelles Dateisystem und weiss permanent, welche Files sich geändert haben. Einfach durch eine Datenbankabfrage.
Das ganze funktioniert und läuft.
Zzt haben wir max. 3000 Events pro Sekunde. Im Mittel (8-19Uhr) liegen wir bei 250/s
Die einzelnen Nachrichten haben eine Größe von etwa 1 bis 2 k. Einige wenige sind aber auch bis zu 5k groß.

Mir ist jetzt aber eingefallen, das ich mit all den Daten noch viel mehr machen kann.
Ich wollte also das ganze erweitern. Dabei ist alles zusammengebrochen.
Jede Zeile Code hing irgendwie mit jeder anderen zusammen.

Daher will ich es jetzt in Module zerlegen.
Der Wechsel von MySQL auf SQLite hat den Ausschlag gegeben. Das war ein riesen Akt.

Jetzt will ich die Daten noch nach anderen Gesichtspunkten auswerten und im Verarbeitsungsmodul sozusagen Plugins anstöpseln können.

Die ersten Hinweise, die ich bekommen haben waren schon sehr hilfreich. Ich werde den Ansatz ohne Message Broker verfolgen, einfach weil ich ihn gedanklich besser nachvollziehen kann.

Bis der Umbau fertig ist, wird es aber noch ein wenig dauern.



Vielen Dank für die viele Zeit
Antworten