Я нашел ответ на вопрос здесь. Но я не понимаю некоторых идей в ответе. Например, облегченный процесс, как говорят, разделяет его логическое адресное пространство с другими процессами. Что это значит? Я могу понять ту же ситуацию с двумя потоками: оба из них разделяют одно адресное пространство, поэтому оба они могут читать любые переменные из сегмента 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 является ресурсом ядра в пуле ядра и присоединяется и отсоединяется к потоку для каждого потока. Это происходит, когда потоки запланированы или созданы и уничтожены.
Ответ 8
Основываясь на книге Таненбаума "Распределяет системы", легковесные процессы обычно называют гибридной формой нити уровня пользователя и нити уровня ядра. LWP выполняется в контексте одного процесса, и на процесс может быть несколько LWP. Кроме того, каждый LWP может запускать свой собственный (на уровне пользователя) поток. Многопоточные приложения создаются путем создания потоков (с пакетом библиотеки потоков) и последующего назначения каждого потока LWP.
Наибольшим преимуществом использования этого гибридного подхода является то, что создание, уничтожение и синхронизация потоков являются относительно дешевыми и не требуют вмешательства ядра. Кроме того, при условии, что у процесса достаточно LWP, блокирующий системный вызов не приостановит весь процесс.