Несколько процессов или несколько потоков?
ОПИСАНИЕ:
При анализе задачи (серверное ПО), в какой-то момент стало понятно, что ее решение состоит из трех независимых функциональных возможностей. Соответственно, их все можно реализовать в одном процессе из шести потоков, а можно в трех процессах, каждый из которых будет отвечать за свой набор независимых функций.
ВОПРОС: какое решение будет более правильным?
С одной стороны, одно адресное пространство в данном случае совершенно не нужно для этих трех задач, уменьшается возможность скрытого влияния кода, реализующего одну задачу, на код, реализующий другую. С другой стороны, логически эти задачи формируют единое решение, кроме того, три процесса, возможно, будут более ресурсоемки. И как быть, какое архитектурное решение будет более правильным?
ПОЯСНЕНИЕ:
Так устроено ТЗ, что все состояния должны храниться в БД. Поэтому есть функция - загрузки информации извне в БД (с какого-то СОАП сервера). Функция отправки информации из БД во вне (на какой-то СОАП сервер). И функция обработки этой информации внутри. Объектом синхронизации является БД, поэтому эти три задачи становятся совершенно независимыми.
Одна должна просто заливать БД с флагом "появилось", вторая работать со всем, что имеет такой флаг, а третья отправлять все, что имеет флаг "обработано", выставляя финальный флаг "выполнено". Т.е. они независимо мониторят БД и выполняют свои действия, совершенно не обязательно зная об оставшихся задачах. Стоит ли разносить их в разные процессы, для упрощения каждого из решений? Я не знаю.
Буду рад любым мыслям. Спасибо :)
ПОТОКИ, системе легче работать с потоками чем с процессами, так что потоки. Исполнять независимые задачи в разных процессах это старый добрый метод который уже не актуален по-сути. Например, один поток запускается по таймеру ожидание через каждые 10-15 секунд или минут далее отработав поток засыпает и не кушает процессорное время и т.д. Кстати если для windows то легко реализовать процесс в виде службы.
ПОТОКИ, системе легче работать с потоками чем с процессами, так что потоки. Исполнять независимые задачи в разных процессах это старый добрый метод который уже не актуален по-сути. Например, один поток запускается по таймеру ожидание через каждые 10-15 секунд или минут далее отработав поток засыпает и не кушает процессорное время и т.д. Кстати если для windows то легко реализовать процесс в виде службы.
Почему этот метод не актуален? Издержки на работу с процессами настолько существенные?
Дело в том, что с точки зрения накопления ошибок, управления памятью, поддержки - 3 процесса выглядят приятнее.
Кроме того, можно запускать поток с таймингом в каждом из процессов, двум вспомогательным процессам не обязательно быть линейными утилитами, стартуемыми каждые несколько секунд, они могут содержать в себе по потоку с засыпанием.