Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiely medzi typmi dispatch v systémoch riadenia úloh?

sobes.tech AI

Odpoveď od AI

V systémoch riadenia úloh, napríklad v iOS s použitím GCD (Grand Central Dispatch), existujú rôzne typy dispatch, ktoré určujú, ako a kedy budú úlohy vykonávané:

  • Synchronný dispatch (sync) — úloha sa vykonáva v aktuálnom vlákne a vykonávanie kódu je blokované do dokončenia úlohy. Toto je užitočné, keď je potrebné počkať na výsledok pred pokračovaním.

  • Asynchrónny dispatch (async) — úloha je umiestnená do fronty a vykonáva sa na pozadí, aktuálne vlákno nie je blokované. Toto umožňuje neblokovať UI a vykonávať úlohy paralelne.

  • Sekvenčná fronta (serial queue) — úlohy sa vykonávajú jedna po druhej, v prísnom poradí pridania. Toto je vhodné na ochranu zdrojov pred súčasným prístupom.

  • Paralelná fronta (concurrent queue) — úlohy môžu byť vykonávané súčasne, čo zvyšuje výkon v prostrediach s viacerými vláknami.

Príklad použitia GCD v Swift:

let serialQueue = DispatchQueue(label: "com.example.serial")
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)

serialQueue.async {
    print("Úloha 1")
}
serialQueue.async {
    print("Úloha 2")
}

concurrentQueue.async {
    print("Paralelná úloha 1")
}
concurrentQueue.async {
    print("Paralelná úloha 2")
}

Výber typu dispatch závisí od požiadaviek na sekvenciu vykonávania a od potreby neblokovať hlavný vlákno.