2010-08-05 110 views
6

我正在研究一个涉及创建控制台程序的小型项目,该程序旨在由大型产品在后台运行。快速失败或失败安全?

该程序一方面应与主要产品(IP21)通话,另一方面作为服务器,处理多个客户端。

我已经开始研究这个架构,并且提出了一些基于reactor的事件来处理事件,比如主要产品生成的连接或事件。客户端处理部分在单独的线程中处理,每个客户端一个。

但我不同意这个架构上的同事。他说我应该把反应器和其他几个组件放在主线程中,在一个单独的线程中运行。主线程应尽可能简单。我会这样做,以便程序不会崩溃,如果这部分。他表示,完全没有功能的程序比暴力的崩溃更好。

我说快速失败会更好。如果程序的这个(关键)部分崩溃,那么没有理由尝试保持它活着。而且我相信这会给用户带来麻烦。他会注意到有什么地方是错误的,但是如果他看着任务列表(我们的产品是某种任务管理器,它列出应该运行的任务并允许轻松跟踪一个崩溃的任务),他不会注意到该程序崩溃!

我希望大家能给予一定的论据向一侧或其他帮助我们;)

编辑:谢谢您的回答,但我们不同意的是关于把反应堆和少数人的效用在严重的编程相关问题的情况下(segfault /死锁/ <在这里插入关键问题>),在单独的线程中的其他组件。我认为让程序在没有这个线程的情况下运行将是既危险又毫无意义的。

+0

使用前摄模式:) http://en.wikipedia.org/wiki/Proactor_pattern – garik 2010-08-05 11:08:43

回答

1

在编辑问题时,我发现在SO上发现了this answer,我认为它也回答了这个问题。

0

取决于你需要做什么以及它有多关键。如果你可以在某些步骤失败时处理某些步骤,那么就可以通过这些步骤并继续前进。 (比如发送邮件;如果有一条消息发送失败,则不希望它让其他人无法通过。)如果一步失败使其他人无法可靠地执行,则只会失败整个过程。

3

使用Proactor模式:)

故障安全。但这取决于任务(关键与否)和用户的忠诚度。稳定性。你失去了一个用户或所有用户。