Sobes.tech
Junior

iOS өнүктүрүү контекстинде GCD (Grand Central Dispatch) эмне?

sobes.tech AI

AIден жооп

GCD (Grand Central Dispatch) — бул Apple тарабынан түзүлгөн төмөнкү деңгээлдеги API, ал параллелдүү операцияларды башкаруу жана коддун асинхрондуу аткарылышын камсыз кылат. Ал тапшырмаларды аткаруу кезектерине жөнөтүү механизминин камсыз кылат, алар системанын көзөмөлүндө болот.

Негизги өзгөчөлүктөрү:

  • Тапшырмалар кезектери (Dispatch Queues): FIFO түзүмдөр, аларга код блоктору (closures) кошулат.
    • Алар параллелдүү (concurrent) жана кезектүү (serial) түрлөрдөн чыгат.
    • Дүйнөлүк системдик кезектерди сунуштайт жана өзүнчө түзүүгө болот.
  • Блоктор (Blocks): иш бирдиктери, алар кезектерге жөнөтүлөт.
  • Жиптерди башкаруу: иштеп чыгуучудан жиптерди түздөн-түз башкарууну жашырып, системага тапшырмаларды оптималдуу бөлүштүрүүгө мүмкүндүк берет.
  • Приоритеттер: системдик глобалдык параллелдүү кезектерде тапшырмалар үчүн приоритеттерди белгилөөгө мүмкүндүк берет.

Кезектердин түрлөрү:

  • Serial (катардык): тапшырмаларды катар менен аткарат, кошуу тартибинде. Бир убакта бир гана тапшырма аткарылат деп кепилдик берет.
    • Негизги кезек (DispatchQueue.main) — UI жаңыртуулары үчүн атайын serial кезек.
    • Колдонуучу түзгөн serial кезектер.
  • Concurrent (параллелдүү): бир нече тапшырманы бир убакта аткара алат, аяктоо тартиби кепилденбейт.
    • Системдик глобалдык параллелдүү кезектер, ар кандай кызмат сапаты (QoS) менен.
    • Колдонуучу түзгөн параллелдүү кезектер.

QoS деңгээлдери:

QoS деңгээли Description Колдонуу мисалдары
userInteractive Колдонуучу менен активдүү иштешүүчү тапшырмалар Анимациялар, UI окуяларын иштетүү
userInitiated Колдонуучу тарабынан ишке киргизилген жана дароо натыйжа талап кылган тапшырмалар Түйменин басылышы менен мазмунду жүктөө
utility Узак мөөнөттүү тапшырмалар, дароо натыйжа талап кылбайт Маалыматтарды жүктөө, сүрөттөрдү иштетүү
background Фон режиминде иштеген тапшырмалар, колдонуучу көрбөйт Кэшти жаңыртуу, маалыматтарды синхрондоо
unspecified QoS деңгээли көрсөтүлгөн эмес, системанын өзү аны аныктайт Эски API же төмөн деңгээлдеги системдик тапшырмалар

Коддун мисалы:

// Фон режиминде тапшырма аткаруу (глобалдык параллелдүү кезек)
DispatchQueue.global(qos: .userInitiated).async {
    // Узак мөөнөттүү операцияны аткаруу
    print("Фондук тапшырма аткарылууда")

    // UI жаңыртуу үчүн негизги жипке кайтуу
    DispatchQueue.main.async {
        print("UI жаңыртуу негизги жипте")
    }
}

GCD көпжиптүү ишти жана параллелизмди жөнөкөйлөтөт, кодду окумдуулукка жакындатып жана race conditions сыяктуу каталардын алдын алат, ал эми төмөнкү деңгээлдеги жиптерди башкаруудан айырмаланып.