Sobes.tech
Middle

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.