Зеленые темы против не зеленых потоков - PullRequest
66 голосов
/ 19 апреля 2011

Я хотел бы понять преимущества, предоставляемые потоками этого типа.

  • В каких средах зеленые потоки лучше, чем не зеленые?Некоторые говорят, что зеленые потоки лучше для многоядерных процессоров.

  • Любые ожидаемые проблемы с поведением.

Ответы [ 7 ]

69 голосов
/ 19 апреля 2011

Статья в Википедии Зеленые темы очень хорошо это объясняют.

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

В частности, в контексте Java зеленые потоки остались в прошлом.См. Статью JDK 1.1 для Руководства разработчика по Solaris .(Речь идет о Solaris, но тот факт, что зеленые потоки больше не используются, действителен для обычных платформ).

Зеленые потоки были оставлены в Sun JVM для Linux с момента выпуска версии 1.3 (см. Технология Java [tm] на платформе Linux на archive.org).Это относится к 2000 году. Для Solaris нативные потоки были доступны в JDK 1.2.Это относится к 1998 году. Я даже не думаю, что когда-либо существовала реализация «зеленых потоков» для Windows, но я не могу найти ссылку на это.

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

19 голосов
/ 30 сентября 2013

Память зеленых потоков выделяется из кучи, а не из стека, созданного для нее ОС.Это может потенциально увеличить порядок параллельных потоков на порядок или более.Как уже упоминали другие, это не будет использовать преимущества нескольких процессоров автоматически, однако вариант использования обычно предназначен для блокировки ввода / вывода - например, зеленые потоки могут позволить вам обрабатывать 100 000 одновременных соединений, а не 10 000.

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

18 голосов
/ 19 апреля 2011

Зеленые потоки - это потоки, реализованные на уровне приложения, а не в ОС. Это обычно делается, когда ОС не предоставляет API потоков или работает не так, как вам нужно.

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

Было несколько ранних JVM, в которых использовались зеленые потоки (IIRC - это порт JVM Blackdown для Linux), но в настоящее время все основные JVM используют реальные потоки. Там могут быть некоторые встроенные JVM, которые все еще используют зеленые потоки.

5 голосов
/ 15 марта 2015

Зеленые потоки значительно быстрее, чем собственные потоки, когда имеют больше активных потоков, чем процессоры.

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

Затем Java удалила зеленые потоки, чтобы полагаться только на собственные потоки. Это сделало потоки Java медленнее, чем зеленые потоки.

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

4 голосов
/ 01 августа 2013

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

Зеленые потоки эмулируют многопоточные среды, не полагаясь ни на какие собственные возможности ОС, и они управляются в пространстве пользователя, а не в пространстве ядра, что позволяет им работать в средах, в которых нет поддержки собственных потоков

Performace:

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

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

2 голосов
/ 19 апреля 2011

Зеленые темы не запланированы ОС.

Это означает, что планирование для них происходит в пользовательском пространстве и не обрабатывается ядром. Это означает, что зеленые потоки обычно нельзя заставить использовать все ядра процессора.

Для любой основной платформы, работающей на Java в наши дни (например, x86 или x64), вы будете использовать реальные потоки.

1 голос
/ 07 октября 2017

Многопоточность JAVA реализована двумя моделями:

  1. Модель с зеленой нитью
  2. Модель родной ОС

Модель Green Thread: Поток, которым управляет JVM без поддержки базовой ОС, называется Green Thread. Очень немногие ОС, такие как Sun Solaris, поддерживают модель зеленых потоков. Не рекомендуется и не рекомендуется использовать.

Модель собственной ОС: Поток, который управляется JVM с помощью базовой ОС, называется моделью собственной ОС. Все ОС Windows поддерживают встроенную модель ОС.

...