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.