Зеленые нити - Green threads

В компьютерное программирование, зеленые нити находятся потоки которые запланированы библиотека времени исполнения или виртуальная машина (VM) вместо исходной базовой Операционная система (ОПЕРАЦИОННЫЕ СИСТЕМЫ). Зеленые потоки имитируют многопоточные среды, не полагаясь на какие-либо собственные возможности ОС, и ими управляют в пространство пользователя вместо того ядро space, что позволяет им работать в средах, в которых нет встроенной поддержки потоков.[1]

Этимология

Зеленые темы относятся к названию исходной темы. библиотека для языка программирования Ява. Он был разработан Зеленая команда в Sun Microsystems.[2]

Спектакль

На многоядерный процессор, реализации собственных потоков могут автоматически назначать работу нескольким процессорам, тогда как реализации зеленых потоков обычно не могут.[1][3] На некоторых виртуальных машинах зеленые потоки могут быть запущены намного быстрее. Однако на однопроцессорных компьютерах наиболее эффективная модель еще не определена.

Тесты на компьютерах под управлением (давно устаревшие) Ядро Linux версия 2.2 показали, что:[4]

Когда зеленый поток выполняет системный вызов блокировки, блокируется не только этот поток, но и все потоки внутри процесса.[5] Чтобы избежать этой проблемы, зеленые потоки должны использовать асинхронный ввод / вывод операций, хотя повышенная сложность на стороне пользователя может быть уменьшена, если виртуальная машина реализация зеленых потоков порождает определенные процессы ввода-вывода (скрытые от пользователя) для каждой операции ввода-вывода.[нужна цитата ]

Существуют также механизмы, которые позволяют использовать собственные потоки и уменьшают накладные расходы на активацию и синхронизацию потоков:

  • Пулы потоков снизить стоимость создания нового потока за счет повторного использования ограниченного числа потоков.[6]
  • Языки, которые используют виртуальные машины и собственные потоки, могут использовать анализ побега чтобы избежать синхронизации блоков кода, когда они не нужны.[7]

Зеленые потоки в виртуальной машине Java

В Java 1.1, зеленые потоки были единственной моделью потоков, используемой Виртуальная машина Java (JVM),[8] по крайней мере на Солярис. Поскольку зеленые потоки имеют некоторые ограничения по сравнению с собственными потоками, в последующих версиях Java они отказались от них в пользу собственных потоков.[9][10]

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

Килим[11][12] и Квазар[13][14]- это проекты с открытым исходным кодом, которые реализуют зеленые потоки в более поздних версиях JVM путем изменения Байт-код Java производится компилятором Java (Quasar также поддерживает Котлин и Clojure ).

Зеленые темы на других языках

Есть и другие языки программирования которые реализуют эквиваленты зеленых потоков вместо собственных потоков. Примеры:

В Erlang виртуальная машина имеет то, что можно назвать зеленые процессы - они похожи на процессы операционной системы (они не разделяют состояние, как потоки), но реализованы в Erlang Run Time System (erts). Иногда их называют зеленые нити, но имеют существенные отличия[требуется разъяснение ] из стандартных зеленых ниток.[нужна цитата ]

В случае GHC Haskell переключение контекста происходит при первом распределении после настраиваемого тайм-аута. Потоки GHC также потенциально могут выполняться в одном или нескольких потоках ОС в течение их срока службы (существует связь «многие ко многим» между потоками GHC и потоками ОС), что обеспечивает параллелизм на симметричная многопроцессорная обработка машины, не создавая при этом более дорогостоящих потоков ОС, чем это необходимо для работы на доступном количестве ядер.[нужна цитата ]

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

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

 [    [(Задержка forMilliseconds: 50) Подождите] повторение ] forkAt: Процессор высокий приоритет

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

Смотрите также

использованная литература

  1. ^ а б Синтес, Тони (13 апреля 2001 г.). «Четыре на века». JavaWorld. Получено 2020-07-14. Зеленые потоки, потоки, предоставляемые JVM, выполняются на уровне пользователя, что означает, что JVM сама создает и планирует потоки. Следовательно, ядро ​​операционной системы не создает и не планирует их. Вместо этого базовая ОС видит JVM только как один поток. Зеленые потоки оказываются неэффективными по ряду причин. Прежде всего, зеленые потоки не могут использовать преимущества многопроцессорной системы (...) Таким образом, потоки JVM должны выполняться в этом единственном потоке JVM, который выполняется внутри одного процессора.
  2. ^ «Технология Java: первые годы». java.sun.com. 2014-12-22. Архивировано из оригинал на 30.05.2008.
  3. ^ «В чем разница между« зелеными »потоками и« родными »потоками?». jguru.com. 2000-09-06. Получено 2009-06-01. На многопроцессорных машинах собственные потоки могут запускать более одного потока одновременно, назначая разные потоки разным процессорам. Зеленые потоки работают только на одном процессоре.
  4. ^ «Сравнительная оценка производительности потоков Java для встроенных приложений: поток Linux против зеленого потока». CiteSeerX  10.1.1.8.9238. Цитировать журнал требует | журнал = (Помогите)
  5. ^ Столлингс, Уильям (2008). Операционные системы, внутреннее устройство и принципы проектирования. Нью-Джерси: Прентис-Холл. п. 171. ISBN  9780136006329.
  6. ^ Зигер, Ник (22.07.2011). «Параллелизм в JRuby». Машинный двор. Получено 2013-01-26. Для систем с большим объемом электронной почты этот наивный подход может не работать. Собственные потоки несут большую стоимость инициализации и накладные расходы на память, чем зеленые потоки, поэтому JRuby обычно не может поддерживать более 10 000 потоков. Чтобы обойти это, мы можем использовать пул потоков.
  7. ^ Гетц, Брайан (18 октября 2005 г.). «Теория и практика Java: оптимизация синхронизации в Mustang». IBM. Получено 2013-01-26.
  8. ^ «Потоки Java в среде Solaris - более ранние выпуски». Корпорация Oracle. Получено 2013-01-26. В результате возникло несколько проблем: приложения Java не могли взаимодействовать с существующими приложениями MT в среде Solaris, потоки Java не могли работать параллельно на многопроцессорных системах, Java-приложение MT не могло использовать настоящий параллелизм ОС для более быстрых приложений на однопроцессорных или многопроцессорных системах. . Чтобы существенно повысить производительность приложений, библиотека зеленых потоков была заменена собственными потоками Solaris для Java на платформе Solaris 2.6; это реализовано на платформах Solaris 7 и Solaris 8.
  9. ^ «Темы: зеленые или собственные». Группа ШОС. Получено 2013-01-26. Выигрыш в производительности от использования собственных потоков на MP-машине может быть значительным. Например, при использовании искусственного теста производительности, в котором потоки Java выполняют обработку независимо друг от друга, можно получить трехкратное увеличение общей скорости на машине с 4 процессорами MP.
  10. ^ «Темы: зеленые или собственные». codestyle.org. Архивировано из оригинал на 2013-01-16. Получено 2013-01-26. JVM требует значительных накладных расходов на обработку, чтобы отслеживать состояния потоков и переключаться между ними, поэтому режим зеленого потока устарел и удален из более поздних реализаций Java.
  11. ^ "килим". GitHub. Получено 2016-06-09.
  12. ^ «Килим». www.malhar.net. Получено 2016-06-09.
  13. ^ "Код Quasar на GitHub".
  14. ^ "Параллельная вселенная". Получено 6 декабря 2015.
  15. ^ "Куриная схема". Получено 5 ноября 2017.
  16. ^ "зеробит / грин-нити". GitHub. Получено 2016-04-08.
  17. ^ «Функции Stackless на уровне приложений - документация PyPy 4.0.0». Получено 6 декабря 2015.
  18. ^ «Параллелизм: GitBook». crystal-lang.org. Получено 2018-04-03.
  19. ^ «Темы: Обзор». Справка по Dyalog APL 17.0. Получено 2018-12-14. А нить является цепочкой выполнения в рабочем пространстве APL.
  20. ^ https://twitter.com/joeerl/status/1010485913393254401
  21. ^ а б "Иди и догма". исследования! rsc. Получено 2017-01-14. например, и Go, и Haskell нуждаются в каких-то «зеленых потоках», поэтому существует больше общих проблем во время выполнения, чем вы могли ожидать.
  22. ^ "Язык программирования Limbo". www.vitanuova.com. Получено 2019-04-01.
  23. ^ "Многопоточность в интерпретаторе MRI Ruby ~ BugFactory". Получено 2019-06-08.
  24. ^ "Ракетные места". Получено 2011-10-13. Места позволяют разрабатывать параллельные программы, использующие машины с несколькими процессорами, ядрами или аппаратными потоками. Место - это параллельная задача, которая фактически является отдельным экземпляром виртуальной машины Racket.
  25. ^ "Stackless.com: о Stackless". Архивировано из оригинал на 2013-02-06. Получено 2008-08-27. Планировщик циклического перебора встроен. Его можно использовать для планирования задач как совместно, так и с упреждением.
  26. ^ "Цикл событий Tcl". Получено 6 декабря 2015.

внешние ссылки