Процесс по сравнению с потоками

24
задан Cœur 15 January 2017 в 15:07
поделиться

6 ответов

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

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

15
ответ дан wvdschel 29 November 2019 в 00:06
поделиться

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

  • Это более трудно для единственной задачи разрушить другие задачи.
  • [еще 111] память будет доступна для каждого процесса. Это важно для больших, высокоэффективных приложений как Apache или серверы баз данных, как Пост-ГРЭС. Это важно и для выделенной памяти и для файлов с отображенной памятью.
5
ответ дан Adam Tegen 29 November 2019 в 00:06
поделиться

Степень параллелизма главным образом зависит от физических процессоров / ядра, доступные на Вашей машине. Если у Вас есть single-processor/core машина, то наличие отдельных процессов может вызвать слишком много служебное. Потоки обычно предпочитались бы в этом случае.

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

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

4
ответ дан Krishna 29 November 2019 в 00:06
поделиться

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

2
ответ дан Matt Brandt 29 November 2019 в 00:06
поделиться

Несколько ссылок, которые могли помочь Вам решить, я надеюсь:

http://blog.labnotes.org/2006/08/29/why-processes-scale-better-than-threads/ http://www.jroller.com/cpurdy/entry/fastcgi_not_so_fast

2
ответ дан noobmaster69 29 November 2019 в 00:06
поделиться

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

1
ответ дан Lars Truijens 29 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: