Потоки являются большим количеством легкого веса, и для создания нескольких "рабочих" только для использования всех availabe центральных процессоров или ядер, Вы лучше из с потоками.
, Когда Вы нуждаетесь в рабочих, чтобы быть лучше изолированными и более устойчивые, как с большинством серверов, идут с сокетами. Когда один поток отказывает плохо, он обычно удаляет весь процесс, включая другие потоки, работающие в том процессе. Если процесс закисает и умирает, он не касается никакого другого процесса, таким образом, они могут счастливо продолжать свой бизнес, как будто ничего не произошло.
Процессы больше изолировали память. Это важно по ряду причин:
Степень параллелизма главным образом зависит от физических процессоров / ядра, доступные на Вашей машине. Если у Вас есть single-processor/core машина, то наличие отдельных процессов может вызвать слишком много служебное. Потоки обычно предпочитались бы в этом случае.
, Если у Вас есть несколько ядер/Центральных процессоров тогда в зависимости от того, что делает каждый процесс/поток, можно выбрать процессы, если издержки выравниваются по ширине. Процессы, очевидно, имеют намного лучший уровень изоляции памяти, чем потоки - но в то же время в Windows, процессы довольно тяжелы, по сравнению с потоками.
Потоки, конечно, могут обменяться данными в том же процессе - но снова необходимо было бы синхронизировать доступ к совместно используемым данным - для предотвращения поврежденного состояния. Обмен данными между процессами более включен, издержки (который встречают, чем простая синхронизация потока) в зависимости от механизмов, используемых, таких как Именованные каналы, пользовательская основанная на сокетах коммуникация, с помощью платформы дистанционной работы, совместно используемый файл / база данных и т.д.
Как правило, вы должны использовать процессы, когда отдельным потокам выполнения не нужно обмениваться глобальными данными, и вы хотите, чтобы каждый из них был защищен от других.
Несколько ссылок, которые могли помочь Вам решить, я надеюсь:
http://blog.labnotes.org/2006/08/29/why-processes-scale-better-than-threads/ http://www.jroller.com/cpurdy/entry/fastcgi_not_so_fast
В Windows процессы тяжелее, чем потоки. Так что если у вас есть несколько небольших задач, поток или пул потоков будет лучше. Или используйте пул процессов для их переработки. Также разделение состояния между процессами - это больше работы, чем разделение состояния между потоками. Но опять же: потоки могут дестабилизировать весь процесс, унося с собой другие потоки. Если вы хотите свести к минимуму вероятность этого, вы можете перейти к отдельным процессам. Домены приложений .Net могут быть средним звеном между обоими.