Зеленые потоки против не Зеленых потоков


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

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

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

7 51

7 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

производительность :

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

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

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

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

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

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

  1. Нить Зеленого Цвета, Модель
  2. родная модель ОС

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

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