Здравствуйте, Hard_Club, Вы писали:
H_C>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным?
Зависит от задач/инструментария/платформы.
Если есть ответ на вопрос: "зачем мне нужна многопоточность", то определить способ реализации обычно несложно.
Ни о чем. Техническое понимание разницы между потоком и процессом не дает даст понимания того, что лучше и в каком случае использовать.
Для ТС: Скорей всего, стоит изучить практики использования процессов и потоков в разных классах приложений на живых примерах, понять чем вызвано то или иное решение. Какого-то конкретного ответа на данный вопрос не существует, т,к. выбор определяется классом решаемой задачи + используемыми инструментами.
Здравствуйте, Hard_Club, Вы писали:
H_C>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным?
Если части приложения практически изолированны друг от друга, и/или при этом необходимо, чтобы при сбое в одной из частей приложение продолжало функционировать — то многопроцессное.
Если части приложения достаточно связаны друг с другом, и/или важна эффективность при переключение контекста — то многопоточное.
Здравствуйте, Hard_Club, Вы писали: H_C>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным?
Процессы и потоки (с прикладной точки зрения) имеют всего два важных, но взаимоисключающих отличия:
1)Безопасность: Высокая у процессов, т.к. обеспечивается на уровне ОС и железа. И низкая у потоков (зависит от среды выполнения и прямоты рук программиста).
2)Взаимодействие: Сложное и медленное у процессов, т.к. безопасность. И простое и быстрое у потоков (для этого они собственно и существуют).
Что важней для вашего приложения?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
KP>Ни о чем. Техническое понимание разницы между потоком и процессом не дает даст понимания того, что лучше и в каком случае использовать.
Это вообще круто. То есть понимание того что как работает плюс знание требований и здравый смысл это не "тру вэй". "Тру вэй" это подсмотри у других и сделай у себя так же?
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, kaa.python, Вы писали:
B>Это вообще круто. То есть понимание того что как работает плюс знание требований и здравый смысл это не "тру вэй". "Тру вэй" это подсмотри у других и сделай у себя так же?
Краткое описание на которое ты дал линку не дает сколь-нибудь глубокого понимания особенностей выбора между потоками и процессами. А смотреть на чужие решения не только можно, но и нужно. Где ты нашел "подсмотри у других и сделай у себя так же"?
Здравствуйте, kaa.python, Вы писали:
KP>Где ты нашел "подсмотри у других и сделай у себя так же"?
Здесь: KP>Скорей всего, стоит изучить практики использования процессов и потоков в разных классах приложений на живых примерах
Здравствуйте, C.A.B, Вы писали:
CAB>Здравствуйте, Hard_Club, Вы писали: H_C>>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным? CAB>Процессы и потоки (с прикладной точки зрения) имеют всего два важных, но взаимоисключающих отличия: CAB>1)Безопасность: Высокая у процессов, т.к. обеспечивается на уровне ОС и железа. И низкая у потоков (зависит от среды выполнения и прямоты рук программиста). CAB>2)Взаимодействие: Сложное и медленное у процессов, т.к. безопасность. И простое и быстрое у потоков (для этого они собственно и существуют). CAB>Что важней для вашего приложения?
Я бы добавил в уровнение масштабируемость.
Если не нужно на нескольких узлах сети систему разворачивать — многопоточным.
Иначе на процессах.
Здравствуйте, Sanik, Вы писали:
S>Здравствуйте, C.A.B, Вы писали:
CAB>>Здравствуйте, Hard_Club, Вы писали: H_C>>>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным? CAB>>Процессы и потоки (с прикладной точки зрения) имеют всего два важных, но взаимоисключающих отличия: CAB>>1)Безопасность: Высокая у процессов, т.к. обеспечивается на уровне ОС и железа. И низкая у потоков (зависит от среды выполнения и прямоты рук программиста). CAB>>2)Взаимодействие: Сложное и медленное у процессов, т.к. безопасность. И простое и быстрое у потоков (для этого они собственно и существуют). CAB>>Что важней для вашего приложения?
S>Я бы добавил в уровнение масштабируемость. S>Если не нужно на нескольких узлах сети систему разворачивать — многопоточным. S>Иначе на процессах.
Но ведь часто делают так: есть несколько ядер на разных машинах и на них гоняют по много потоков.
Здравствуйте, Hard_Club, Вы писали:
H_C>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным?
Многопроцессное приложение предпочтительно на машинах с несколькими процессорами, с необходимостью
распределения нагрузки между ними. В остальном потоки менее дороги в плане переключения контекстов,
поэтому, если нет требования изоляции контекстов параллельных задач приложения и исполнение
подразумевается на одном CPU, то потоки предпочтительней. Но надо помнить, что потоки тоже бывают разными.
Лучшей считается их реализация в солярисе, там есть две их реализации, POSIX thread, Solaris thread.
Здравствуйте, Hard_Club, Вы писали:
H_C>Здравствуйте, Sanik, Вы писали:
S>>Здравствуйте, C.A.B, Вы писали:
CAB>>>Здравствуйте, Hard_Club, Вы писали: H_C>>>>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным? S>>Я бы добавил в уровнение масштабируемость. S>>Если не нужно на нескольких узлах сети систему разворачивать — многопоточным. S>>Иначе на процессах.
H_C>Но ведь часто делают так: есть несколько ядер на разных машинах и на них гоняют по много потоков.
Все так. Подходим к комбинированному варианту решения
Посему во время проектирования выписывают все варианты достижения цели, и под каждым расписать плюсы и минусы.
Ну и принимают решения (иногда неверные).
Как-то так...
Здравствуйте, smeeld, Вы писали:
S>Здравствуйте, Hard_Club, Вы писали:
H_C>>Как определить во время проектирования: делать приложение многопоточным или прогопроцессным?
S>Многопроцессное приложение предпочтительно на машинах с несколькими процессорами, с необходимостью S>распределения нагрузки между ними. В остальном потоки менее дороги в плане переключения контекстов, S>поэтому, если нет требования изоляции контекстов параллельных задач приложения и исполнение S>подразумевается на одном CPU, то потоки предпочтительней. Но надо помнить, что потоки тоже бывают разными. S>Лучшей считается их реализация в солярисе, там есть две их реализации, POSIX thread, Solaris thread.