Middle
Kuidas toimub mitmetöötlus ühes tuumas olevas seadmes?
sobes.tech AI
Vastus AI-lt
Ühe tuuma seadmel emuleeritakse mitmetöötlust operatsioonisüsteemi kaudu aja kvantimise ja kontekstivahetuse mehhanismi abil.
- Aja kvant: Iga niit saab väikese protsessori ajahetke.
- Eemaldatav mitmetöötlus: Operatsioonisüsteem katkestab ühe niidi täitmise aja või ressursside (näiteks sisend-väljund) ootamise ajal.
- Konteksti vahetamine: Praeguse niidi seisund (protsessori registerid, instruktsiooni näitaja, mälu seisund) salvestatakse ja järgmise niidi seisund laaditakse sisse.
- Paralleelsuse illusioon: Kiire vahetamise tõttu niitide vahel tekib mulje, et nad täidetakse paralleelselt, kuigi tegelikult töötab protsessoril korraga ainult üks niit.
iOS kasutab raamistikke nagu GCD (Grand Central Dispatch) ja Operation Queues, mis abstracteerivad need madala taseme mehhanismid ning lihtsustavad mitmetöötluse haldamist arendajale. GCD kasutab niidupulki ja haldab nende elutsüklit ning planeerimist automaatselt, isegi ühe tuumaga seadmetel.
Näiteks GCD kasutamine:
import Foundation
// Asünkroonse ülesande loomine
DispatchQueue.global(qos: .userInitiated).async {
// Kood, mis täidetakse taustaniidil
// Ühe tuumaga seadmel interleaved see kood
// teiste niitide/põhiniiaga täitmisega
print("Täidetakse taustaniidil")
}
// Põhinüit jätkab täitmist
print("Täidetakse peamise niidiga")
Isegi ühe tuumaga seadmel paneb GCD selle ülesande järjekorda ja eraldab sellele kvantide aja täitmiseks, vahetades selle ja peamise niidi (ning teiste niitide, kui neid on) vahel, luues illusiooni paralleelsusest.