Sobes.tech
Middle+

Wat zijn groene draden (green threads)?

sobes.tech AI

Antwoord van AI

Groene threads zijn threads die op gebruikersniveau worden beheerd, niet door het besturingssysteem. Ze worden niet direct weergegeven op de OS-threads. Planning en context-switching tussen groene threads worden uitgevoerd in de runtime van de programmeertaal of via een speciale bibliotheek.

Belangrijkste kenmerken:

  • Beheer: Volledig uitgevoerd tijdens runtime.
  • Resources: Vereisen minder systeembronnen (geheugen en CPU-tijd) in vergelijking met native OS-threads voor creatie en switching.
  • Planning: Niet-preemptief (coöperatief multitasken). De thread moet expliciet de controle overdragen zodat een andere groene thread kan worden uitgevoerd.
  • Parallellisme: Vanwege de niet-preemptieve planning en beheer in gebruikersruimte, ondersteunen groene threads niet expliciet gelijktijdige uitvoering op multi-core processors zonder aanvullende mechanismen (bijvoorbeeld het gebruik van meerdere processen, elk met hun eigen groene threads).

In Ruby, vooral in oude versies (voor 1.9) en met MRI (Matz's Ruby Interpreter), werden groene threads gebruikt. Dit leidde tot prestatieproblemen op multi-core systemen, omdat slechts één groene thread op een gegeven moment kon worden uitgevoerd, geblokkeerd door de Global Interpreter Lock (GIL). In nieuwere versies van MRI en alternatieve implementaties (JRuby, Rubinius) worden native OS-threads gebruikt.

# Voorbeeld van het gebruik van threads in Ruby (afhankelijk van versie en implementatie kunnen het groene of native threads zijn)
t1 = Thread.new do
  puts "Thread 1 gestart"
  sleep(1)
  puts "Thread 1 voltooid"
end

t2 = Thread.new do
  puts "Thread 2 gestart"
  sleep(1)
  puts "Thread 2 voltooid"
end

t1.join # Wacht tot thread t1 klaar is
t2.join # Wacht tot thread t2 klaar is

puts "Alle threads voltooid"

Vergelijking tussen groene en native threads:

Kenmerk Groene threads Native OS-threads
Beheer Gebruikersruimte Kern van het OS
Aanmaak/Context switch Goedkoper Duurder
Planning Coöperatief (niet-preemptief) Preemptief
Parallellisme Beperkt (één CPU) zonder mechanismen Volledig (meerdere CPU's)
Blokkerende oproepen Blokkeren de hele interpreter/proces Blokkeren alleen de huidige native thread

In de context van moderne Ruby (vanaf 1.9 en hoger met MRI) zijn Thread-threads native OS-threads. Groene threads, als het hoofdmodel voor parallelisme, zijn nu zeldzaam in MRI, maar kunnen voorkomen in specifieke bibliotheken of alternatieve runtimes.