Parallelverarbeitung ist immer wieder für eine Überraschung gut.

Das Grundproblem: Ein Administrationstool führt regelmäßig mittels eines Daemons bestimmte Prozesse aus, welche teilweise 5-10 Minuten brauchen, bis sie abgeschlossen sind. Allerdings sind es nicht immer exakt die gleichen Befehlszeilen, sondern die Argumente unterscheiden sich, und es ist nicht vorhersehbar wann ein solcher Prozess benötigt wird — dies wird vom Benutzer angestoßen.

Der Daemon erhält seine Aufträge per RPC. Klarer Fall in einer solchen Situation: Asynchrones Interface. Der Aufruf welcher einen Prozess startet kehrt sofort zurück, der Prozess wird in den Hintergrund geschickt.

Das Hauptproblem dabei ist, dass manchmal eine Reihe von Befehlen ausgeführt werden muss. Dies lässt sich am einfachsten mit klassischen synchron programmiertem Code erreichen, welcher einfach schrittweise ausgeführt wird. Es gilt also einen Kompromiss zwischen synchronem und asynchronem Code zu finden, indem man einen Prozess in den Hintergrund schickt, welcher dann seinerseits die eigentlichen Zielprozesse der Reihe nach ausführt und auf deren Beendigung wartet, bevor er den nächsten Prozess startet.

 continue reading