Cum se realizează multitasking-ul pe un dispozitiv cu un singur nucleu?
sobes.tech AI
Răspuns de la AI
Pe un dispozitiv cu un singur nucleu, multitreading-ul este emulat de sistemul de operare prin mecanismul de quantum de timp și schimbarea de context.
- Quantum de timp: Fiecărui fir de execuție i se alocă o mică bucată de timp a procesorului.
- Multitasking preemptiv: Sistemul de operare întrerupe execuția unui fir după ce acesta își termină quantum-ul de timp sau când așteaptă resurse (de exemplu, intrare/ieșire).
- Schimbarea de context: Starea firului curent (înregistrările procesorului, indicatorul de instrucțiuni, starea memoriei) este salvată, iar starea firului următor este încărcată.
- Iluzia de paralelism: Datorită schimbărilor rapide între fire, se creează impresia că acestea rulează în paralel, deși în orice moment doar un fir rulează pe nucleu.
iOS utilizează framework-uri precum GCD (Grand Central Dispatch) și Operation Queues, care abstractizează aceste mecanisme de nivel inferior, simplificând gestionarea multitreading-ului pentru dezvoltator. GCD folosește pool-uri de fire și gestionează automat ciclul de viață și planificarea acestora pe nucleele procesorului disponibile (chiar și pe unul singur).
De exemplu, folosind GCD:
import Foundation
// Crearea unei sarcini asincrone
DispatchQueue.global(qos: .userInitiated).async {
// Codul care va fi executat pe un fir de fundal
// Pe un dispozitiv cu un singur nucleu, acest cod va fi intercalat
// cu execuția altor fire/ fir principal
print("Executat pe fir de fundal")
}
// Firul principal continuă execuția
print("Executat pe firul principal")
Chiar și pe un dispozitiv cu un singur nucleu, GCD va plasa această sarcină într-o coadă și îi va aloca quanta de timp pentru execuție, alternând între ea și firul principal (și alte fire, dacă există) pentru a crea iluzia de paralelism.