Подтвердить что ты не робот

Зеленые темы против не зеленых нитей

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Performace:

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

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

Ответ 6

Зеленые потоки не назначаются ОС.

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

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

Ответ 7

JAVA Multi-Threading реализуется двумя моделями:

  • Модель зеленой резьбы
  • Модель родной ОС

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

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