Sobes.tech
Middle+

Co jsou zelené vlákna (green threads)?

sobes.tech AI

Odpověď od AI

Zelené vlákna jsou vlákna řízená na úrovni uživatelského prostoru, nikoli operačního systému. Přímo se nezobrazují na vláknech OS. Plánování a přepínání kontextu mezi zelenými vlákny provádí běhové prostředí jazyka nebo speciální knihovna.

Hlavní charakteristiky:

  • Řízení: Plně prováděno běhovým prostředím.
  • Zdroje: Vyžadují méně systémových zdrojů (paměti a CPU času) ve srovnání s nativními vlákny OS pro tvorbu a přepínání.
  • Plánování: Kooperativní (nepředvídatelné multitasking). Vlákno musí výslovně předat řízení, aby mohlo být vykonáváno jiné zelené vlákno.
  • Paralelismus: Kvůli nepředvídatelnému plánování a řízení v uživatelském prostoru zelená vlákna explicitně nepodporují paralelní vykonávání na vícejádrových procesorech bez dalších mechanismů (například použití více procesů, každý se svými zelenými vlákny).

V Ruby, zejména ve starších verzích (před 1.9) a s MRI (Matz's Ruby Interpreter), se používala zelená vlákna. To vedlo k problémům s výkonem na vícejádrových systémech, protože pouze jedno zelené vlákno mohlo být vykonáváno v jakémkoli okamžiku, blokované Global Interpreter Lock (GIL). V novějších verzích MRI a alternativních implementacích (JRuby, Rubinius) jsou používána nativní vlákna OS.

# Příklad použití vláken v Ruby (v závislosti na verzi a implementaci, mohou to být zelená nebo nativní)
t1 = Thread.new do
  puts "Vlákno 1 začalo"
  sleep(1)
  puts "Vlákno 1 dokončeno"
end

t2 = Thread.new do
  puts "Vlákno 2 začalo"
  sleep(1)
  puts "Vlákno 2 dokončeno"
end

t1.join # Čeká na dokončení vlákna t1
t2.join # Čeká na dokončení vlákna t2

puts "Všechna vlákna dokončena"

Porovnání zelených a nativních vláken:

Charakteristika Zelená vlákna Nativní vlákna OS
Řízení Uživatelský prostor Jádro OS
Vytváření/Přepínání Levnější Drahé
Plánování Kooperativní (nepředvídatelné) Předvídatelné
Paralelismus Omezen (jeden CPU) bez mechanismů Plný (více CPU)
Blokující volání Blokují celý interpretér/proces Blokují pouze aktuální nativní vlákno

V kontextu moderního Ruby (od 1.9 a výše MRI) jsou standardní vlákna Thread nativními vlákny OS. Zelená vlákna, jako hlavní model paralelismu, jsou nyní vzácná v MRI, ale mohou se vyskytovat v specifických knihovnách nebo alternativních běhových prostředích.