Я работаю над небольшим проектом, связанным с созданием консольной программы, предназначенной для запуска в фоновом режиме с помощью более крупного продукта.Неудачный сбой или сбой?
Программа должна разговаривать с основным продуктом (IP21) с одной стороны и действовать как сервер, обрабатывая несколько клиентов, с другой.
Я начал работать над архитектурой и придумал что-то, основанное на обработке событий, таких как соединения или события, генерируемые основным продуктом. Часть обработки клиента обрабатывается отдельными потоками, по одному на каждого клиента.
Но я не согласен с коллегой по этой архитектуре. Он говорит, что я должен поставить реактор и несколько других компонентов, работающих в основном потоке, в отдельном потоке. Основной поток должен быть как можно более простым. Я бы сделал это, чтобы программа не разбилась, если эта часть работает. Он говорит, что лучше иметь совершенно нефункциональную программу, чем насильственный сбой.
Я говорю, что лучше быстро потерпеть неудачу. Если эта (критическая) часть программы выйдет из строя, нет причин пытаться сохранить ее в живых. Более того, я считаю, что это может вызвать проблемы у пользователя; Он заметит, что что-то не так, но если он посмотрит на список задач (наш продукт как диспетчер задач, который перечисляет задачи, которые должны выполняться, и позволяет легко отслеживать разбитый), он не заметит, что программа разбилась!
Я надеюсь, что вы можете помочь нам, давая некоторые аргументы одной или другой стороне;)
редактировать: спасибо за ваши ответы, но то, что мы не согласны на это о пользе сдачи реактора и несколько другие компоненты в отдельном потоке в случае серьезной проблемы, связанной с программированием (segfault/deadlock/< вставить критическую проблему здесь >). Я думаю, что было бы опасно и бессмысленно, чтобы программа работала без этой темы.
Использование шаблона Proactor :) http://en.wikipedia.org/wiki/Proactor_pattern – garik