Почему я должен использовать поток против использования процесса? - PullRequest
43 голосов
/ 06 марта 2009

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


Редактировать

Что-нибудь о том, как (или если) они действуют по-разному с одноядерным и многоядерным процессорами, также будет полезно.

Ответы [ 7 ]

72 голосов
/ 06 марта 2009

Вы бы предпочли несколько потоков нескольким процессам по двум причинам:

  1. Межпотоковое взаимодействие (обмен данными и т. Д.) Значительно проще для программирования, чем межпроцессное взаимодействие.
  2. Переключение контекста между потоками происходит быстрее, чем между процессами. То есть ОС быстрее останавливает один поток и запускает другой, чем делает то же самое с двумя процессами.

Пример:

Приложения с графическим интерфейсом обычно используют один поток для графического интерфейса, а другие - для фоновых вычислений. Например, проверка орфографии в MS Office - это отдельный поток от потока, в котором работает пользовательский интерфейс Office. В таких приложениях использование нескольких процессов вместо этого приведет к снижению производительности и сложности написания и поддержки кода.

32 голосов
/ 06 марта 2009

Хорошо, кроме преимуществ использования потоков над процессом, таких как:

Преимущества:

  • Намного быстрее создать тему, чем процесс.
  • гораздо быстрее переключаться между потоками, чем переключаться между процессами.
  • Темы обмениваются данными легко

Также учтите несколько недостатков:

  • Нет безопасности между потоками.
  • Один поток может растоптать другой поток. данные.
  • Если блокируется один поток, все темы в блоке задач.

Что касается важной части вашего вопроса «Когда мне следует использовать ветку?»

Хорошо, вы должны учитывать несколько фактов, что потоки не должны изменять семантику программы. Они просто меняют сроки выполнения операций. В результате они почти всегда используются в качестве элегантного решения проблем, связанных с производительностью. Вот несколько примеров ситуаций, когда вы можете использовать потоки:

  • Выполнение длительной обработки: когда приложение Windows вычисляет, оно не может обрабатывать больше сообщений. В результате отображение не может быть обновлено.
  • Фоновая обработка: некоторые задачи могут быть не критичны по времени, но нужно выполнять постоянно.
  • Выполнение операций ввода-вывода: ввод-вывод на диск или на сеть может иметь непредсказуемый задержки. Темы позволяют вам обеспечить что задержка ввода / вывода не задерживает несвязанные части вашего приложения.
6 голосов
/ 06 марта 2009

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

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

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

6 голосов
/ 06 марта 2009

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

Использование процесса означает, что вам также необходимо межпроцессное взаимодействие (IPC) для ввода и вывода данных из процесса. Это хорошо, если процесс должен быть изолированным.

2 голосов
/ 15 сентября 2010

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

2 голосов
/ 10 июля 2009

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

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

0 голосов
/ 20 августа 2018

наткнулся на этот пост. Интересная дискуссия. но я чувствовал, что одна точка отсутствует или косвенно указана.

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

Использование потока или процесса для достижения цели зависит от требований к использованию вашей программы и использования ресурсов.

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