Sobes.tech
Middle

Kaip vykdoma daugiagyslė veikla įrenginyje su vienu branduoliu?

sobes.tech AI

Atsakymas iš AI

Vieno branduolio įrenginyje daugiaprocesiškumas emuliuojamas operacinės sistemos per laiko kvotų ir konteksto perjungimo mechanizmą.

  • Laiko kvota: Kiekvienam srautui skiriamas mažas procesoriaus laiko tarpas.
  • Išstumiantis daugiužduotumas: Operacinė sistema nutraukia vieno srauto vykdymą pasibaigus jo laiko kvotai arba laukimo dėl išteklių (pavyzdžiui, įvesties-išvesties).
  • Konteksto perjungimas: Dabartinio srauto būsena (procesoriaus registrai, instrukcijos rodyklė, atminties būsena) išsaugoma, o kito srauto būsena įkeliama.
  • Paralelumo iliuzija: Greitas perjungimas tarp srautų sukuria įspūdį, kad jie vyksta lygiagrečiai, nors bet kuriuo momentu veikia tik vienas srautas.

iOS naudoja karkasus, tokius kaip GCD (Grand Central Dispatch) ir Operation Queues, kurie abstrakčiai valdo šiuos žemo lygio mechanizmus, supaprastindami daugiaprocesiškumo valdymą kūrėjui. GCD naudoja srautų baseinus ir automatiškai valdo jų gyvavimo ciklą bei planavimą prieinamose procesoriaus šerdyse (net ir vieno šerdies įrenginiuose).

Pavyzdžiui, naudojant GCD:

import Foundation

// Sukurti asinchroninę užduotį
DispatchQueue.global(qos: .userInitiated).async {
    // Kodas, kuris bus vykdomas foniniame sraute
    // Vieno branduolio įrenginyje šis kodas bus interleaved
    // su kitų srautų/pagrindinio srauto vykdymu
    print("Vykdoma foniniame sraute")
}

// Pagrindinis srautas tęsia vykdymą
print("Vykdoma pagrindiniame sraute")

Net ir vieno branduolio įrenginyje, GCD sudės šią užduotį į eilę ir skirs jai laiko kvotas vykdymui, perjungdamas ją ir pagrindinį srautą (bei kitus srautus, jei yra), sukurdami iliuziją apie lygiagretumą.