Ruby har et lett lite trådsystem internt. Det kjører fullstendig inne i fortolkeren, benytter ikke plattformspesifikke tråder, kan ikke dra nytte av flere CPUer og dersom en tråd kaller en C-metode som blokkerer, kan det sulte ut alle de andre trådene også. Men dersom mye av prosesseringen du gjør skjer i Ruby, er de veldig nyttige.
1| puts 'A1' 2| traad = Thread.new do 3| puts 'B1' 4| sleep 2 5| puts 'B2' 6| end 7| puts 'A2' 8| puts traad.join # Vent på at tråden avslutter. 9| # Utput blir: A1 B1 A2 B2 |
Merk at når hovedtråden (main) avslutter, drepes alle andre tråder. Man må kalle join
eller lignende på trådene om man ønsker å vente på dem.
Ønsker man å returnere en verdi fra en tråd, kan man kalle value
i stedet for join
.
1| pi_traad = Thread.new do 2| # Regn ut PI til ørten desimaler ... 3| puts 'Regne, regne, regne!' 4| sleep 5 # Vanlig student-innsats fra denne tråden... 5| Math::PI # ... og tror du ikke den koker også! 6| end 7| puts 'Tråden går i bakgrunnen.' 8| print 'PI er ', pi_traad.value # Vent på returverdien fra tråden. |
NB: Unntak som heves i tråder vil svinne hen i stillhet, med mindre vi eksplisitt venter på at tråden skal avslutte, eller Thread.abort_on_exception
er satt til true
.