Вытесняющие нити против не вытесняющих нитей - PullRequest
44 голосов
/ 10 ноября 2010

Может ли кто-нибудь объяснить разницу между моделью вытесняющих потоков и моделью не вытесняющих потоков?

Согласно моему пониманию:

  • Модель с не вытесняющей резьбой: После запуска потока его нельзя остановить или управление не можетбыть перенесены в другие потоки, пока поток не завершит свою задачу.
  • Модель вытесняющей потоковой обработки: Среде выполнения разрешено входить и передавать управление из одного потока в другой в любое время.Потоки с более высоким приоритетом имеют приоритет перед потоками с более низким приоритетом.

Может кто-нибудь, пожалуйста:

  1. Объясните, если понимание правильное.
  2. Объясните преимущества и недостатки обеих моделей.
  3. Пример использования того, что будет действительно полезно.
  4. Если я создаю поток в Linux (system v или Pthread) без упоминания каких-либо опций (есть ли ??) по умолчанию, используемая модель потоков является вытесняющеймодель потоков?

Ответы [ 4 ]

35 голосов
/ 10 ноября 2010
  1. Нет, ваше понимание не совсем верно. Непрерывные (иначе называемые кооперативные) потоки обычно вручную передают управление, чтобы позволить другим потокам работать до того, как они завершат (хотя этот поток должен вызвать yield() (или любой другой), чтобы это произошло.
  2. Уплотнение заправки проще. Кооперативные потоки имеют меньше накладных расходов.
  3. Обычно используйте упреждающий. Если вы обнаружите, что в вашем проекте много накладных расходов на переключение потоков, возможна оптимизация кооперативных потоков. Однако во многих (большинстве?) Ситуациях это будет довольно крупная инвестиция с минимальной отдачей.
  4. Да, по умолчанию вы получите преимущественную многопоточность, хотя, если вы посмотрите на пакет CThreads, он поддерживает совместную многопоточность. Мало кто (сейчас) хочет сотрудничать, но я не уверен, что оно обновлялось за последнее десятилетие ...
20 голосов
/ 10 ноября 2010

Непрерывные потоки также называются кооперативными потоками.Примером этого является POE (Perl).Другой пример - классическая Mac OS (до OS X).Кооперативные потоки имеют исключительное использование процессора, пока они не откажутся от него.Затем планировщик выбирает другой поток для запуска.

Вытесняющие потоки могут добровольно отказаться от ЦП, как и кооперативные, но когда они этого не делают, он будет взят из них, и планировщик запустит другой поток.Потоки POSIX и SysV попадают в эту категорию.

Большим преимуществом кооперативных потоков является большая эффективность (по крайней мере, на одноядерных машинах) и более простая обработка параллелизма: он существует только тогда, когда вы получаете контроль, поэтому блокировка не выполняется.не требуется.

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

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

7 голосов
/ 22 ноября 2014

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

без вытеснения:

1. Без переключателя контекста = меньше наверх , что может бытьразумно в модели без вытеснения

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

с вытеснением :

Преимущество:

1. В этой модели у нас есть приоритет, который может помочь нам лучше контролировать процесс выполнения

2. Мы можем видеть лучший параллелизм

3.Мы можем обработать системный вызов, не блокируя всю систему.

Недостаток:

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

2. Часто большие накладные расходы, которые мы должны заплатить

0 голосов
/ 23 января 2019

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

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

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

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

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

Однако в спецификации языка Java ничего не указано, что должнопроизойдет с равным приоритетом потоков.В некоторых системах эти потоки будут разделены по времени, и среда выполнения выделит потоку определенное количество времени.Когда это время истекло, среда выполнения вытесняет работающий поток и переключается на следующий поток с тем же приоритетом.

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

Что касается преимуществ, то и Дероберт, и Бедность достаточно четко их выделили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...