Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Несколько процессов или несколько потоков?

1.8K
22 октября 2013 года
Arkady
153 / / 18.12.2007
Доброго времени суток,

ОПИСАНИЕ:
При анализе задачи (серверное ПО), в какой-то момент стало понятно, что ее решение состоит из трех независимых функциональных возможностей. Соответственно, их все можно реализовать в одном процессе из шести потоков, а можно в трех процессах, каждый из которых будет отвечать за свой набор независимых функций.

ВОПРОС: какое решение будет более правильным?

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

ПОЯСНЕНИЕ:
Так устроено ТЗ, что все состояния должны храниться в БД. Поэтому есть функция - загрузки информации извне в БД (с какого-то СОАП сервера). Функция отправки информации из БД во вне (на какой-то СОАП сервер). И функция обработки этой информации внутри. Объектом синхронизации является БД, поэтому эти три задачи становятся совершенно независимыми.
Одна должна просто заливать БД с флагом "появилось", вторая работать со всем, что имеет такой флаг, а третья отправлять все, что имеет флаг "обработано", выставляя финальный флаг "выполнено". Т.е. они независимо мониторят БД и выполняют свои действия, совершенно не обязательно зная об оставшихся задачах. Стоит ли разносить их в разные процессы, для упрощения каждого из решений? Я не знаю.
Буду рад любым мыслям. Спасибо :)
326
22 октября 2013 года
sadovoya
757 / / 19.11.2005
Если сделать в виде процессов (две программы утилиты загрузок и одна - центр управления и обработки), то такая штука легче сопровождается и больше возможностей повторного использования. Для загрузки/выгрузки впрочем и одной утилиты хватит.
11K
22 октября 2013 года
xAtom
65 / / 17.01.2011
Цитата:
ВОПРОС: какое решение будет более правильным?


ПОТОКИ, системе легче работать с потоками чем с процессами, так что потоки. Исполнять независимые задачи в разных процессах это старый добрый метод который уже не актуален по-сути. Например, один поток запускается по таймеру ожидание через каждые 10-15 секунд или минут далее отработав поток засыпает и не кушает процессорное время и т.д. Кстати если для windows то легко реализовать процесс в виде службы.

326
22 октября 2013 года
sadovoya
757 / / 19.11.2005
Можно центр управления в виде службы. А сам он может запускать и выгружать утилиту. И т.п.
1.8K
22 октября 2013 года
Arkady
153 / / 18.12.2007
Цитата: xAtom
Цитата:
ВОПРОС: какое решение будет более правильным?


ПОТОКИ, системе легче работать с потоками чем с процессами, так что потоки. Исполнять независимые задачи в разных процессах это старый добрый метод который уже не актуален по-сути. Например, один поток запускается по таймеру ожидание через каждые 10-15 секунд или минут далее отработав поток засыпает и не кушает процессорное время и т.д. Кстати если для windows то легко реализовать процесс в виде службы.



Почему этот метод не актуален? Издержки на работу с процессами настолько существенные?
Дело в том, что с точки зрения накопления ошибок, управления памятью, поддержки - 3 процесса выглядят приятнее.

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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог