Быстро провалиться или потерпеть неудачу? - PullRequest
6 голосов
/ 05 августа 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 05 августа 2010

Использование Proactor pattern :)

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

0 голосов
/ 05 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...