Зеленые потоки — это потоки, управляемые на уровне пользовательского пространства, а не операционной системы. Они не отображаются непосредственно на потоки ОС. Планирование и переключение контекста между зелеными потоками осуществляются run-таймом языка программирования или специальной библиотекой.
Основные характеристики:
В Ruby, особенно в старых версиях (до 1.9) и с MRI (Matz's Ruby Interpreter), использовались зеленые потоки. Это приводило к проблемам с производительностью на многоядерных системах, так как только один зеленый поток мог выполняться в любой момент времени, заблокированный Global Interpreter Lock (GIL). В более поздних версиях MRI и альтернативных реализациях (JRuby, Rubinius) используются нативные потоки ОС.
ruby
Сравнение зеленых и нативных потоков:
| Характеристика | Зеленые потоки | Нативные потоки ОС |
|---|---|---|
| Управление | Пользовательское пространство | Ядро ОС |
| Создание/Переключение | Дешевле | Дороже |
| Планирование | Кооперативное (невытесняющее) | Вытесняющее |
| Параллелизм | Ограничен (один ЦП) без механизмов | Полный (много ЦП) |
| Блокирующие вызовы | Блокируют весь интерпретатор/процесс | Блокируют только текущий нативный поток |
В контексте современного Ruby (от 1.9 и выше MRI), стандартные потоки Thread являются нативными потоками ОС. Зеленые потоки, как основная модель параллелизма, сейчас редки в MRI, но могут встречаться в специфических библиотеках или альтернативных run-таймах.