Middle+
160
questionbank

Что такое зеленые потоки (green threads)?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

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

Основные характеристики:

  • Управление: Полностью осуществляются run-таймом.
  • Ресурсы: Требуют меньше системных ресурсов (памяти и времени ЦП) по сравнению с нативными потоками ОС для создания и переключения.
  • Планирование: Невытесняющее (cooperative multitasking). Поток должен явно уступить управление, чтобы другой зеленый поток мог выполняться.
  • Параллелизм: Из-за невытесняющего планирования и управления в пользовательском пространстве, зеленые потоки в явном смысле не поддерживают параллельное выполнение на многоядерных процессорах без дополнительных механизмов (например, использования нескольких процессов, каждый со своими зелеными потоками).

В Ruby, особенно в старых версиях (до 1.9) и с MRI (Matz's Ruby Interpreter), использовались зеленые потоки. Это приводило к проблемам с производительностью на многоядерных системах, так как только один зеленый поток мог выполняться в любой момент времени, заблокированный Global Interpreter Lock (GIL). В более поздних версиях MRI и альтернативных реализациях (JRuby, Rubinius) используются нативные потоки ОС.

ruby

Сравнение зеленых и нативных потоков:

ХарактеристикаЗеленые потокиНативные потоки ОС
УправлениеПользовательское пространствоЯдро ОС
Создание/ПереключениеДешевлеДороже
ПланированиеКооперативное (невытесняющее)Вытесняющее
ПараллелизмОграничен (один ЦП) без механизмовПолный (много ЦП)
Блокирующие вызовыБлокируют весь интерпретатор/процессБлокируют только текущий нативный поток

В контексте современного Ruby (от 1.9 и выше MRI), стандартные потоки Thread являются нативными потоками ОС. Зеленые потоки, как основная модель параллелизма, сейчас редки в MRI, но могут встречаться в специфических библиотеках или альтернативных run-таймах.