Tråd

I prosess-tråd-modellen så vil hver prosess bestå av én eller flere tråder. Der prosessen kan sees på som en gruppering av ressurser, er tråden den enheten som eksekveres på CPUen. Alle trådene i en prosess deler prosessens adresseområde – dette gjør at det går mye raskere å bytte mellom tråder enn mellom prosesser.

Prosess med tre tråder

En prosess med 3 tråder. Hver tråd har sin egen stack og sine egne registre og program counters, men de deler adresseområde.

Tanenbaum \cite[97-98]{tanenbaum5} gir tre hovedargumenter for å benytte flere tråder i prosesser.

  1. De fleste applikasjoner ønsker å gjøre flere ting om gangen. Hvis man bare har en tråd må man bruke multiprosessering til å blant annet vente på input fra brukeren.
  2. Tråder er lettere enn prosesser, og det kreves mye mindre ressurser for å skape og å avslutte tråder enn prosesser. I noen systemer er det 10–100 ganger raskere å opprette tråder enn prosesser\cite[98]{tanenbaum5}.
  3. Tråder gjør ofte at vi kan kjøre programmer raskere. Så lenge trådene ikke er begrenset av CPUen (såkalt CPU bound, se kapittel \ref{}), så vil man spare tid på å bruke flere tråder i en prosess.

Tråder kan ses på som lette prosesser\cite[102]{tanenbaum5} fordi det kreves mindre for å skape og terminere tråder enn prosesser. I noen systemer er det 10–100 ganger raskere å opprette tråder enn prosesser\cite[98]{tanenbaum5}, og så lenge trådene ikke er begrenset av CPUen (såkalt CPU bound, se kapittel \ref{}), så vil man spare tid på å bruke flere tråder i en prosess. Mange prosessorer har støtte for multithreading, det vil si at de at de kan bytte mellom tråder i løpet av nanosekunder.

Alle trådene i en prosess deler prosessens adresseområde og andre ressurser som åpne filer, signaler, alarmer og så videre. Siden det er en bruker som har startet, og eier, prosessen, så bør det ikke være noe problem at alle trådene har tilgang til det samme minnet – i utgangspunktet skal jo trådene samarbeide for å fullføre prosessen. Man må likevel være oppmerksom på utfordringer som kan oppstå når to tråder kjører tilnærmet samtidig i \textit{multithreading}, for eksempel kan en tråd forsøke å lukke en fil samtidig som en annen forsøker å skrive til den.

Innen informatikken har en prosess én eller flere tråder.