Sobes.tech
Middle

Beszéljen az iOS több szálas programozásában lévő globális sorról.

sobes.tech MI

Válasz az MI-től

A Grand Central Dispatch (GCD) globális sorai előre definiált rendszer sorok, amelyek minden alkalmazás számára elérhetők. Ezek párhuzamos sorok, ami azt jelenti, hogy bennük lévő feladatok párhuzamosan futtathatók külön szálakon.

Fő jellemzők:

  • Típusok: A szolgáltatás minőségi szintje (QoS - Quality of Service) szerint változnak.
  • QoS: Meghatározza a feladatok végrehajtási prioritását, befolyásolva, hogy mely feladatokat kell gyorsabban végrehajtania a rendszernek.
  • Párhuzamosság: Több feladat egyidejű végrehajtását teszi lehetővé.
  • Rendszer: A rendszer hozza létre és kezeli őket.

A globális sorok típusai (prioritási sorrendben csökkenő):

QoS szint Leírás
userInteractive Feladatok, amelyek közvetlenül befolyásolják a felhasználói felületet (animációk, események).
userInitiated A felhasználó által indított feladatok, de nem blokkolják a UI-t (tartalom betöltése).
default Alapértelmezett szint, kifejezett QoS megjelölés nélkül.
utility Időt igénylő feladatok, de nem befolyásolják az UI-t azonnal (nagy fájlok betöltése).
background Háttérben futó feladatok, nem láthatók a felhasználó számára (adat szinkronizálás).
unspecified Ritkán használt, amikor a QoS nem fontos. Egyenértékű a default-tal.

Hozzáférés a globális sorokhoz:

// Egy adott QoS szinttel rendelkező globális sor elérése
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)

// Az alapértelmezett globális sor elérése
let defaultQueue = DispatchQueue.global()

A globális sorok felhasználása feladatok végrehajtására:

// Aszinkron feladat végrehajtása háttér sorban
DispatchQueue.global(qos: .background).async {
    // Hosszú ideig tartó kód, amely nem blokkolja a UI-t
}

// Szinkron feladat végrehajtása (kevésbé elterjedt globális sorok esetén)
DispatchQueue.global(qos: .userInitiated).sync {
    // Kód, amelyet be kell fejezni a jelenlegi szál folytatása előtt
}

Fontos megjegyezni:

  • Ne hajts végre olyan feladatokat, amelyek közvetlenül befolyásolják a felhasználói felületet, a globális sorokban (kivéve a userInteractive-t nagyon gyors műveletekhez). A UI frissítéséhez használja a fő sor (DispatchQueue.main).
  • A globális sorokat párhuzamos végrehajtásra tervezték. A feladatok végrehajtási sorrendje nem garantált.
  • A sync használata egy globális sorban blokkolja a jelenlegi szálat a feladat befejezéséig. Ez UI blokkolást okozhat, ha a fő szálról hívják.