Ruby Lag en ny tråd

Ruby Lag en ny tråd

En tråd er en enkelt utførelsesenhet i et program. Et ordinært program er entrådet, der instruksjonene i programmet utfører suksessivt til oppsigelse.

På den annen side lar Multi-Threading programmet lage flere tråder der instruksjoner i et program kan utføre samtidig. Det tilbyr utmerket utnyttelse av systemressurser som CPU og minne.

I Ruby bruker vi tråder ved hjelp av trådklassen. Tråder i Ruby er ikke ressurstunge, noe som gjør dem effektive for å bruke samtidighet i programmene dine.

Tråder implementeres innen Ruby -tolken for Ruby versjon 1.9 og under. Fra versjon 1.9 og over implementeres gjenging på operativsystemet.

Ved hjelp av denne guiden lærer du hvordan du implementerer tråder i Ruby -programmering.

Merknad: Matzs tolk (MRI) har en global tolklås som stopper flere tråder fra å løpe samtidig. Dette gjelder imidlertid ikke for tolker.

Opprette en tråd

Som nevnt kan vi jobbe med tråder ved hjelp av trådklassen. For å lage en ny tråd, ring tråden.Ny metode.

Syntaksen er:

Tråd.Ny # trådblokk går her

Forsikre deg om å inkludere koden du vil ha utført av tråden inne i paret krøllete seler.

Her er et eksempel:

Tråd.Ny setter "Hei, verden!"

La oss ta et enkelt program som beregner området for en sirkel.

Def Area
PI = 3.14159
rad = 7.3
Return (pi * rad * rad)
slutt
Tråd.Ny
område()
setter "å løpe inne i tråden!""

setter "utførelse fullført!""

Hvis du kjører eksemplet ovenfor, vil du merke at vi ikke får området til sirkelen. Dette er fordi Ruby ikke venter på at de opprettede trådene skal fullføre utførelsen. For å sikre at trådene fullføres, må vi ringe sammenføyningsmetoden.

Forbindelsesmetoden vil pause hovedtrådens utførelse og vente på at trådene som er spesifisert i sammenføyningsmetoden skal fullføre.

Følgende er eksempelkoden ovenfor med implementert sammenføyningsmetoden.

Def Area
PI = 3.14159
rad = 7.3
Return (pi * rad * rad)
slutt
tråd = tråd.Ny
Setter "Området til sirkelen er #Area () cm2"
setter "å løpe inne i tråden!""

tråd.bli med
setter "utførelse fullført!""

I dette eksemplet får vi utgangen fra tråden som vist nedenfor:

Området til sirkelen er 167.41533109999997 CM2
Kjører inne i tråden!
Utførelse fullført!

Avslutte en tråd

Ruby gir forskjellige måter å avslutte en tråd. En slik måte er å bruke Kill -metoden.

Syntaksen er:

Tråd.Kill (tråd)

Spesifiser navnet på tråden som skal avsluttes inne i parentesen.

Tråd unntak

Du vil merke at hvis et unntak kommer opp i en tråd, stopper ikke programutførelsen.

For eksempel:

def error_me
Hev "feil!""
slutt
Tråd.ny error_me
setter "Jeg løper fortsatt"

I eksemplet over reiser vi et unntak inne i funksjonen som er gitt til tråden. Du vil merke to ting:

  1. Tråden vil ikke vise feilmeldingen
  2. Koden etter at tråden fortsatt kjører.

I noen tilfeller kan det være lurt å stoppe utførelsen hvis et unntak kommer opp i en tråd. Vi kan gjøre dette ved hjelp av abort_on_execption.

For eksempel:

Tråd.abort_on_exception = true
tråd = tråd.Ny gjør
setter "Jeg løper før unntak"
Hev "unntaket oppstod!""
slutt
tråd.bli med
setter "Beklager, jeg løper ikke!""

I eksemplet over vil programmet avslutte hvis når en utførelse skjer inne i tråden. Her er et eksempelutgang:

Jeg kjører før unntak
# avsluttet med unntak (Report_on_exception er sant):
tråder.RB: 4: I 'Block in': unntak skjedde! (RunTimeError)
tråder.RB: 4: I 'Block In
': unntak skjedde! (RunTimeError)

Trådvariabler

Variabler som er opprettet i en tråd, overholder Ruby Scope -reglene. De er bare tilgjengelige i omfanget av tråden de er opprettet.

Trådstater

Du kan hente tilstanden til en gitt tråd ved hjelp av statusmetoden. Du kan også bruke levende for å sjekke om tråden kjører, og stoppe for å sjekke om tråden er død.

Det er fem returverdier for statusmetoden:

  1. Løping - Returnerer løp
  2. Sove - kommer tilbake til å sove
  3. Avbryte - Kommer tilbake til å abortere
  4. Avsluttet med unntak - Returnerer null
  5. Avsluttes normalt - Returnerer falsk.

Konklusjon

I denne guiden diskuterte vi det grunnleggende om å jobbe med tråder på Ruby -programmeringsspråket.

Det er godt å merke seg at det er mer enn det vi har diskutert i denne guiden. Vurder dokumentasjonen for å lære mer.

Takk for at du leser!