Lõim (informaatika)

Lõimed (inglise thread) on informaatikas operatsioonisüsteemi või arvutiprogrammi omadus jaotuda[küsitav][viide?] mitmeks protsessiks, mis eeldab, et protsess operatsioonisüsteemis võib koosneda mitmest voost, mis täidetakse paralleelselt (sealhulgas täpsustamata on, mis järjekorras protsesse täidetakse).

Näide protsessist kahe lõimega läbi aja

Mitmelõimelisuse puhul luuakse üldjuhul ajapõhise-jagamise jaoturiga ("ajakvantimisega"), mis töötab samamoodi kui paralleelne mitmete käskude täitmine arvuti programmide puhul: protsessor lülitub erinevate lõimede protsesside teostamise vahel. Siiski, kuna ajakvant on pisike ja võib inimtaju poolt saada tekitatud illusioon samaaegsusest lõppkasutajale. Mitmeprotsessorilistes või mitmetuumalistes süsteemidas võib saavutada lõimelisuse multitöötluse abil, kus erinevad lõimed ja protsessid võivad põhimõtteliselt samaaegsusest saada täidetud teistes protsessorites või tuumades.

Lisaks, programmid võivad implementeerida lõimelisuse kaudselt läbi operatsioonisüsteemi, kasutades taimereid, signaale ja teisi meetodeid täiendamaks oma programmi üldist programmivoo täitmise kulgu saavutades nõnda ad hoc ajakvantimise. Vahel kutsutakse seda kasutajaruumi lõimedeks.

Prioriteet

muuda

Lõimel on omadus prioriteet, mis määrab selle element-protsessi käivitamise eelistuse teiste lõimede suhtes. Prioriteet on määratud täisarvuga. Olenevalt arhitektuurist ja operatsioonisüsteemist on rakendatud protsessori haldussüsteem ning vastavalt nendele reeglitele täidetakse programme. Näiteks lihtne (protsessori haldussüsteemist): väikese prioriteediga lõimesid peavad protsessori ootuse järjekorras olema seni, kuni leidub neist kõrgema prioriteediga lõimesid. Reaalselt on protsessori haldussüsteeme palju, nad töötavad erinevalt ja neil kõigil on omad eelised, hea tava kohaselt on programmeerijale jäetud võimalus eelistada üht lõime teisele. Ühesuguse prioriteediga lõimed jagavad neile antud ajakvanti või on nende tegevus sünkroonitud.

Ajajaotus

muuda

Lihtne (protsessori haldussüsteemis) toimub ajakvandiga, mis on tavaliselt (15–18 ms), järgmiste reeglite kohaselt ümberlülitused:

  • kui tekib kõrgema prioriteediga lõim olekuga "käivitatud", siis lülitutakse sellele lõimele;
  • kui lõim lõpetab oma töö või loobub ajakvandist, siis käivitatakse järgmine kõrgeima prioriteediga lõim, mille olek on käivitatud.

Sünkroonimine

muuda

Lõimed üldjuhul jagavad ressursse, et välistada samaaegselt välja jagatud ressursi probleeme, tuleb lõimedele seada piirangud. Selleks luuakse nn kriitiline koodiosa, kus ei võimaldata teistel protsessidel samade objektidega tööd teostada. Kriitiline koodiosa lukustatakse ja teised lõimed saavad seda alles siis kasutada, kui sisenenud lõim on kriitilisest koodiosast väljas. Lõimede, mis üldse saavad protsesse teostada, arvu piiramiseks saab kasutada semafori.

Objektorienteeritud keeltes nagu Java on primaarobjekti (mis on Javas "object") tihti lisatud lukkude lisamise ja eemaldamise meetodid (neid meetodeid tuntakse ka "monitorina").

Välislingid

muuda