Какая разница между легким процессом и потоком?

Я нашел ответ на вопрос здесь. Но я не понимаю некоторых идей в ответе. Например, облегченный процесс, как говорят, разделяет его логическое адресное пространство с другими процессами. Что это значит? Я могу понять ту же ситуацию с двумя потоками: оба из них разделяют одно адресное пространство, поэтому оба они могут читать любые переменные из сегмента bss (например). Но у нас есть много разных процессов с разными разделами bss, и я не знаю, как поделиться ими.

Ответ 1

Из MSDN, Темы и процессы:

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

Ответ 2

Я не уверен, что ответы здесь верны, поэтому позвольте мне опубликовать мою версию.

Существует разница между процессом - LWP (облегченный процесс) и пользовательским потоком. Я оставлю определение процесса в стороне, так как это более или менее известно, и сосредоточусь на LWP vs user threads. LWP - это то, что по сути называют сегодняшними потоками. Изначально под пользовательским потоком подразумевался поток, которым управляет само приложение, и ядро ничего о нем не знает. LWP, с другой стороны, является единицей планирования и выполнения ядром.

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

Вариант 1. У вас есть 2 пользовательских потока, использующих один LWP. Это означает, что с точки зрения ОС у вас есть ОДИН блок планирования. Всего работает 4 LWP (3 других + 1 ваш). Ваш LWP получает 1/4 от общего процессорного времени, и так как у вас есть 2 пользовательских потока, каждый из них получает 1/8 от общего процессорного времени (зависит от вашей реализации)

Option2. У вас есть 2 LWP. С точки зрения операционной системы, у вас есть два блока планирования. Всего работает 5 LWP. Ваш LWP получает 1/5 от общего процессорного времени КАЖДОГО, а ваше приложение - 2/5 процессорного времени.

Еще одно грубое отличие - у LWP есть pid (идентификатор процесса), а у пользовательских потоков - нет.

По какой-то причине именование стало немного запутанным, и мы называем LWP потоками.

Различий, безусловно, больше, но, пожалуйста, обратитесь к слайдам. http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt

РЕДАКТИРОВАТЬ:

После публикации я нашел хорошую статью, которая объясняет все более подробно и лучше на английском, чем я пишу. http://www.thegeekstuff.com/2013/11/linux-process-and-threads/

Ответ 3

IMO, LWP - это привязка потоков ядра, которая может быть создана и выполнена в пользовательском контексте.

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

Ответ 4

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

Поток пользовательского уровня - это поток, который может обрабатываться библиотекой потоков.

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

Ответ 5

Потоки работают внутри процессов.

Каждый процесс может содержать один или несколько потоков.

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

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

Наконец, есть решение, которое лежит где-то посередине; мы объединяем потоки в LWP. Каждая группа работает на разных процессорах, но потоки в группе не могут обрабатываться несколькими способами. Это потому, что ядро в этой версии знает только о группах (которые являются многопроцессорными), но ничего о потоках, которые они содержат. Надеюсь, это достаточно ясно.

Ответ 6

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

Ответ 7

Отсюда Каждый LWP является ресурсом ядра в пуле ядра и присоединяется и отсоединяется к потоку для каждого потока. Это происходит, когда потоки запланированы или созданы и уничтожены.

enter image description here

Ответ 8

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

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