2010-08-05 7 views
6

Я работаю над небольшим проектом, связанным с созданием консольной программы, предназначенной для запуска в фоновом режиме с помощью более крупного продукта.Неудачный сбой или сбой?

Программа должна разговаривать с основным продуктом (IP21) с одной стороны и действовать как сервер, обрабатывая несколько клиентов, с другой.

Я начал работать над архитектурой и придумал что-то, основанное на обработке событий, таких как соединения или события, генерируемые основным продуктом. Часть обработки клиента обрабатывается отдельными потоками, по одному на каждого клиента.

Но я не согласен с коллегой по этой архитектуре. Он говорит, что я должен поставить реактор и несколько других компонентов, работающих в основном потоке, в отдельном потоке. Основной поток должен быть как можно более простым. Я бы сделал это, чтобы программа не разбилась, если эта часть работает. Он говорит, что лучше иметь совершенно нефункциональную программу, чем насильственный сбой.

Я говорю, что лучше быстро потерпеть неудачу. Если эта (критическая) часть программы выйдет из строя, нет причин пытаться сохранить ее в живых. Более того, я считаю, что это может вызвать проблемы у пользователя; Он заметит, что что-то не так, но если он посмотрит на список задач (наш продукт как диспетчер задач, который перечисляет задачи, которые должны выполняться, и позволяет легко отслеживать разбитый), он не заметит, что программа разбилась!

Я надеюсь, что вы можете помочь нам, давая некоторые аргументы одной или другой стороне;)

редактировать: спасибо за ваши ответы, но то, что мы не согласны на это о пользе сдачи реактора и несколько другие компоненты в отдельном потоке в случае серьезной проблемы, связанной с программированием (segfault/deadlock/< вставить критическую проблему здесь >). Я думаю, что было бы опасно и бессмысленно, чтобы программа работала без этой темы.

+0

Использование шаблона Proactor :) http://en.wikipedia.org/wiki/Proactor_pattern – garik

ответ

1

При редактировании вопроса я нашел this answer на SO, который, я думаю, также отвечает на этот вопрос.

0

Зависит от того, что вам нужно делать и насколько это важно. Если вы можете справиться с определенными шагами, если другие работают, то не выполняйте эти шаги и продолжайте движение. (Подумайте, что-то вроде отправки почты, если одно сообщение не удалось отправить, вы не хотите, чтобы все остальное не получалось.) Только сбой всего процесса, если отказ одного шага делает все невозможным надежно.

3

Используйте Proactor рисунок :)

безаварийности. Но это зависит от задач (критических или нет) и лояльности пользователей. Стабильность. Вы потеряли одного пользователя или всех.

Смежные вопросы