Почему потоки называются облегченными процессами? - PullRequest
22 голосов
/ 15 февраля 2010

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

Я нашел это в одном из учебных пособий.

Может кто-нибудь уточнить, что именно это означает?

Ответы [ 6 ]

27 голосов
/ 15 февраля 2010

Заявление о том, что нити "легковесны", - в зависимости от платформы - не обязательно надежно.

Поток операционной системы должен поддерживать выполнение собственного кода, например, написано на C. Таким образом, он должен обеспечить стек приличного размера, обычно измеряемый в мегабайтах. Поэтому, если вы запустили 1000 потоков (возможно, пытаясь поддерживать 1000 одновременных подключений к вашему серверу), вам потребовалось бы 1 ГБ памяти в вашем процессе, прежде чем вы начнете выполнять какую-либо реальную работу.

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

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

В итоге: остерегайтесь «маркетинговых» заявлений, сделанных от имени потоков. Параллельная обработка хороша (все более и более важной), но потоки - это только один из способов ее достижения.

17 голосов
/ 15 февраля 2010

Создание процесса «дорого», потому что для него необходимо настроить новое пространство виртуальной памяти для процесса с собственным адресным пространством. «дорогое» означает, что занимает много процессорного времени.

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

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

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

9 голосов
/ 15 февраля 2010

Потоки внутри процесса совместно используют одно и то же пространство виртуальной памяти, но каждый имеет отдельный стек и, возможно, «локальное хранилище потоков», если оно реализовано. Они легковесные , потому что переключение контекста - это просто случай переключения указателя стека и счетчика программы и восстановления других регистров, тогда как переключение контекста process также включает переключение контекста MMU.

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

3 голосов
/ 07 октября 2014

процесс:

  1. идентификатор процесса
  2. окружающая среда
  3. папка
  4. 1010 * регистры *
  5. стек
  6. кучного
  7. дескриптор файла
  8. общие библиотеки
  9. инструменты межпроцессного взаимодействия (каналы, семафоры, очереди, разделяемая память и т. Д.)
  10. конкретные источники ОС

Тема:

  1. стек
  2. регистры
  3. атрибуты (для шедулера, такие как приоритет, политика и т. Д.)
  4. конкретные данные потока
  5. конкретные источники ОС
0 голосов
/ 06 августа 2018

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

0 голосов
/ 26 апреля 2015

Процесс содержит один или несколько потоков, и поток может делать все, что может делать процесс. Кроме того, потоки внутри процесса совместно используют одно и то же адресное пространство, из-за чего стоимость обмена данными между потоками низка, поскольку он использует один и тот же раздел кода, раздел данных и ресурсы ОС, поэтому все эти свойства потока делают его «легким процессом».

...