Konzeptuelle Frage

Hallo,

ich stehe vor der Aufgabe, spontane Daten über eine serielle Schnittstelle einzulesen. Das funktioniert auch ganz prima (auf einem Raspberry Pi).
Jetzt allerdings möchte ich je nach Art der Daten diese an verschiedene Threads “weiterreichen”, die dann die eigentliche Bearbeitung vornehmen. Diese Arbeitsthreads sollen sozusagen durch die Daten aufgeweckt werden, den Job machen und sich “wieder hinlegen”. Die Jobs können etwas länger laufen und lesen teilweise auch Daten aus einer (h2)-Datenbank.
Ich dachte, das zuerst über Notifications zu lösen. Aber ich bin mir nicht sicher, ob das wirklich eine gute Idee ist.
Was meint Ihr?

Danke
Peter

Ich würde ganz einfach das Hauptprogramm ein einer Schleige laufen lassen, und immer wenn Daten kommen, startet es einfach einen Arbeitsthread. Solange diese nicht direkt miteinander kommunizieren müssen, sollte das ausreichen.

Ansonsten schau dir mal das Aktoren-Konzept an, z.B. die Akka-Bibliothek.

Ob es durch das PI irgendwelche Einschränkungen gibt, weiß ich nicht, und es ist nicht ganz klar, ob z.B. die Anzahl der Arbeiterthreads festgelegt ist oder nicht (oder ob die ggf. “on the fly” erstellt werden und wieder sterben), aber … der bisherigen Beschreibung nach könnte man das einfach mit ein paar BlockingQueues lösen: Jeder Arbeiter hat eine BlockingQueue, von der er mit blockingQueue.take() eine “Aufgabe” abholt und abarbeitet. Solange die Queue leer ist, wartet er dort automatisch. Sobald von einem anderen Thread was in die Queue reingelegt wird (vermutlich mit blockingQueue.put(), ggf. auch mit offer() !?), wird der Arbeiterthread aufgeweckt, er 'take’t das Element und verarbeitet es.

Hört sich stark nach Producer-Consumer-Pattern an. In Java ist hierfür eine blockingqueue hilfreich. Ohne das gibt es reichlich Lektüre die das Producer-Consumer-PROBLEM beschreiben.

Vielen Dank für die Hinweise. Ich tauche erst mal ab und lese mich weiter ein. Vielleicht tauchen dann ja noch weitere Fragen auf!