2010-08-05 6 views
6

Ich arbeite an einem kleinen Projekt mit der Erstellung eines Konsolenprogramms, das von einem größeren Produkt im Hintergrund ausgeführt werden soll.Fail schnell oder ausfallsicher?

Das Programm soll auf der einen Seite mit dem Hauptprodukt (IP21) kommunizieren und auf der anderen Seite als Server fungieren, der mehrere Clients bedient.

Ich habe angefangen, an der Architektur zu arbeiten und habe etwas entwickelt, das auf einer reactor basiert, die Ereignisse wie Verbindungen oder Ereignisse behandelt, die vom Hauptprodukt erzeugt werden. Das Client-Handling-Teil wird in separaten Threads behandelt, eines pro Client.

Aber ich stimme nicht mit einem Kollegen von mir auf dieser Architektur. Er sagt, ich sollte den Reaktor und die paar anderen Komponenten im Hauptfaden in einem separaten Thread laufen lassen. Der Haupt-Thread sollte so einfach wie möglich sein. Ich würde das tun, damit das Programm nicht abstürzt, wenn dieser Teil tut. Er sagt, es ist besser, ein völlig funktionsloses Programm zu haben als einen heftigen Unfall.

Ich sage, es ist besser, schnell zu versagen. Wenn dieser (kritische) Teil des Programms abstürzt, gibt es keinen Grund, ihn am Leben zu erhalten. Außerdem glaube ich, dass es dem Benutzer Probleme verursachen kann; Er wird bemerken, dass etwas nicht stimmt, aber wenn er sich die Aufgabenliste ansieht (unser Produkt als eine Art Aufgabenmanager, der die Aufgaben auflistet, die ausgeführt werden sollen und es erlauben, einen abgestürzten zu verfolgen), wird er nicht bemerken, dass das Programm abgestürzt ist!

Ich hoffe, dass Sie uns durch einige Argumente auf der einen Seite geben oder anderen helfen kann;)

bearbeiten: Vielen Dank für Ihre Antworten, aber was nicht einverstanden sind wir auf ist über den Nutzen, den Reaktor der Umsetzung und ein paar andere Komponenten in einem separaten Thread im Falle eines ernsthaften Programmierproblems (ein segfault/Deadlock/< kritisches Problem hier einfügen >). Ich denke, es wäre sowohl gefährlich als auch sinnlos, das Programm ohne diesen Thread laufen zu lassen.

+0

Verwenden Sie Proactor Muster :) http://en.wikipedia.org/wiki/Proactor_pattern – garik

Antwort

1

Während der Bearbeitung der Frage fand ich this answer auf SO, die, denke ich, diese Frage auch beantwortet.

0

Hängt davon ab, was Sie tun müssen und wie wichtig es ist. Wenn Sie mit bestimmten Fehlern fertig werden, während andere arbeiten, dann scheitern Sie diese Schritte und machen Sie weiter. (Denken Sie an etwas wie das Versenden von E-Mails; wenn eine Nachricht nicht gesendet wird, möchten Sie nicht, dass der Rest nicht durchkommt.) Scheitern Sie nur den gesamten Prozess, wenn der Ausfall eines Schrittes den Rest unmöglich zuverlässig macht.

3

Verwenden Proactor Muster :)

Fail-Safe. Aber es hängt von den Aufgaben ab (kritisch oder nicht) und der Loyalität der Benutzer. Stabilität. Du hast einen oder alle Benutzer verloren.