Почему потоки называются легкими процессами?

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

Я нашел это в одном из уроков.

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

Ответ 1

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

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

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

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

Вкратце: будьте осторожны с "маркетинговыми" требованиями, сделанными от имени потоков. Параллельная обработка велик (все чаще это будет иметь важное значение), но потоки являются лишь одним из способов ее достижения.

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

процесс:

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

Тема:

  • стек
  • Регистры
  • (для планировщика, как приоритет, политика и т.д.).
  • данные конкретных потоков
  • конкретные источники ОС

Ответ 5

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