Вопрос по multithreading – Какая разница между легковесным процессом и резьбой?

13

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

Конечно @Allok. На этой странице было несколько подробностей об упрощенных процессах. Gray
@ Тюдор, я нашел это и понял (в разделе «Понимание ядра Linux»). Allok
Возможное дублированиеstackoverflow.com/questions/200469/… Gray
Вы, кажется, очень смущены некоторыми понятиями. Я предлагаю вам сначала изучить определение нити и процесса. Tudor
@ Серый, я очень четко понимаю разницу между процессами и потоками. Проблема в понимании легких процессов. Allok

Ваш Ответ

8   ответов
0

ОтВот. Each LWP is a kernel resource in a kernel pool, and is attached and detached to a thread on a per thread basis. This happens as threads are scheduled or created and destroyed.

enter image description here

4

Темы и процессы:

Processes exist in the operating system and correspond to what users see as programs or applications. A thread, on the other hand, exists within a process. For this reason, threads are sometimes referred to as light-weight processes. Each process consists of one or more threads.

0

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

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

1

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

User level thread это те, которые могут быть обработаны библиотекой потоков.

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

0

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

6

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

Существует разница между процессом - LWP (облегченный процесс) и пользовательским потоком. Я оставлю определение процесса в стороне, так как это более или менее известно, и сосредоточусь наLWP vs user threads. LWP is what essentially are called today threads. Originally, user thread meant a thread that is managed by the application itself and the kernel does not know anything about it. LWP, on the other hand, is a unit of scheduling and execution by the kernel.

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

Option 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/

1

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

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

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

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

2

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

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

Похожие вопросы