2010-08-05 175 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模式:)

故障安全。但這取決於任務(關鍵與否)和用戶的忠誠度。穩定性。你失去了一個用戶或所有用戶。