Подтвердить что ты не робот

Процесс против потоков

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

4b9b3361

Ответ 1

Нити более легкие, и для создания нескольких "рабочих" просто для использования всех доступных процессоров или ядер, вам лучше с потоками.

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

Ответ 2

Процессы имеют более изолированную память. Это важно по ряду причин:

  • Сложнее выполнить одну задачу для выполнения других задач.
  • В каждом процессе будет доступно больше памяти. Это важно для крупных высокопроизводительных приложений, таких как Apache или серверов баз данных, таких как Postgres. Это важно как для выделенной памяти, так и для файлов с отображением памяти.

Ответ 3

Степень parallelism в основном зависит от физических процессоров/ядер, доступных на вашем компьютере. Если у вас есть однопроцессорная/ядерная машина, то отдельные процессы могут вызвать слишком много накладных расходов. В этом случае, как правило, предпочтительными являются нитки.

Если у вас несколько ядер/процессоров, то в зависимости от того, что делает каждый процесс/поток, вы можете выбрать процессы, если накладные расходы оправданы. Процессы, очевидно, имеют намного лучший уровень изоляции памяти, чем потоки, но в то же время в Windows процессы довольно тяжелы, по сравнению с потоками.

Темы, конечно, могут обмениваться данными в одном и том же процессе - но вам еще нужно будет синхронизировать доступ к общим данным - чтобы предотвратить повреждение. Совместное использование данных между процессами в большей степени связано с накладными расходами (которые сглажены, чем простая синхронизация потоков) в зависимости от используемых механизмов, таких как именованные каналы, пользовательская связь на основе сокетов, с использованием инфраструктуры удаленного доступа, общего файла/базы данных и т.д.

Ответ 4

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

Ответ 6

В Windows процессы сложнее создавать потоки. Поэтому, если у вас есть несколько небольших задач, поток или поток пула будет лучше. Или используйте пул процессов для повторного использования процессов. Также совместное использование состояний между процессами - это больше работы, чем совместное использование состояний между потоками. Но опять же: потоки могут дестабилизировать полный процесс, связанный с другими потоками. Если вы хотите свести к минимуму вероятность этого, вы можете пойти на отдельные процессы..Net AppDomains может быть промежуточной средой между ними.