2016-07-28 2 views
2
  1. Много-к-одному Модель
  2. один-к-одной модели
  3. Многие-ко-многим Модель

Преимущества и недостатки каждой модели?Различия между Многопоточность Модели

Можете привести пример?

EDIT: 

Одно смущает меня многие-к-одной модели я цитирую книгу:

«управление потоками осуществляется библиотекой потоков в пользовательском пространстве, так что является эффективным;., а весь процесс будет блокировать, если поток делает системный вызов с блокировки Кроме того, потому что только один поток может получить доступ к ядра в то время, несколько потоков не может работать параллельно на мультипроцессорах»

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

Заранее благодарен!

ответ

6

Мы должны назначить темы пользовательского уровня ядра темы на уровне, на основе этого отображения может быть:

  1. Один к одному (Один пользовательского потока отображается на один уровень ядра потока)

  2. Многие к одному (резьбу Многого уровня пользователя, отображенный на один уровень ядра нити)

  3. Многие ко многие (нитей Многого уровня пользователя, отображенных на многие потоки на уровне ядра)

Здесь число потоков на уровень ядра, как правило, установленные на меньшее, чем количество уровней пользовательского потока, так как управление потоками на уровне ядра намного дороже, поскольку он включает вмешательство ядра в их (управление потоком уровня ядра).

По этой причине только четвертое сопоставление «один ко многим» (один поток нитей уровня пользователя для нескольких потоков уровня ядра) не имеет смысла.

«Управление потоками осуществляется библиотекой потоков в пространстве пользователя, поэтому он эффективен, но весь процесс блокируется, если поток выполняет системный вызов блокировки. Кроме того, поскольку только один поток может обращаться к ядру на время, несколько потоков не могут работать параллельно на многопроцессорных системах»

этот пример может помочь понять эту строку:

enter image description here

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

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

Я надеюсь, что это имеет смысл для вас ...

+0

Это сделало все понятным. Спасибо! –

2

Я вижу вашу проблему. У вас ужасная книга.

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

1) Темы реализованы в библиотеке с использованием таймеров. В системах, которые планируют процессы для выполнения, это единственный способ сделать поток. Это был ТОЛЬКО способ делать потоки в старые времена. Эта система обычно называется «пользовательские потоки». Пользовательские потоки мультиплексируются в процессе. Процесс выполняет планирование собственных потоков.

Мифическое преимущество «пользовательских потоков» над «потоками ядра» (ниже) заключается в том, что они более эффективны. Это то, к чему ссылается ваш цитируемый отрывок. Утверждение «весь процесс блокируется, если поток вызывает системный вызов блокировки», справедлив только для некоторых систем [unix].

2) Нити реализованы в операционной системе. Процесс состоит из адресного пространства и одного или нескольких потоков. Ядро операционной системы планирует НИТЬ для выполнения, а не ПРОЦЕССОВ. Это поток ядра.

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

Это простой способ объяснить различные модели резьбы.

- = - = - = - = - = - = - = - = - = - = - = -

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

Давайте изменим терминологию. Для # 1 вместо вызова планируемой единицы исполнения «процесс» мы называем это «потоком ядра». В этой модели может быть только один поток ядра для каждого процесса. Тогда потоки в этом процессе - это «пользовательские потоки». Любое количество пользовательских потоков, выполняемых внутри /, отображается в поток ядра. Это тогда модель «много-к-одному». Потоки пользователей = много-к-одному.

Если у нас есть операционная система, создайте поток (поток ядра), давайте теоретически будем называть то, что выполняется «пользовательский поток». Каждый поток пользователей отображает/выполняет один и только один поток ядра. Это тогда индивидуальная модель.

Модель «все-к-одному» такая же, как обычно называемая «модель пользовательской резьбы».

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

Модель «один к одному» - это то, что обычно называют моделью потоков ядра.

Наконец, мы переходим к модели «многие ко многим». Это теоретическая БС. Теоретически, многие потоки пользователей могут отображаться во многих потоках ядра. Другими словами, один поток пользователей может выполняться в разных потоках ядра. Я никогда не слышал о том, как система реализует потоки таким образом, и я не могу представить никаких практических преимуществ такой системы.

- = - = - = - = - = - = - = - = - = - = - = - = -

Что касается вашего последнего вопроса, в некоторых операционных системах, система блокировки вызовов блок также блок таймеры, используемые для реализации пользовательских потоков (a/k/a many-to-one). Если один поток выполняет блокирующий вызов, он блокирует все остальные потоки PROCESS от выполнения до завершения блокирующего вызова.

Эта блокировка не встречается во всех системах (что-то должно указывать учебник ОС).

+0

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

Смежные вопросы