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 сыяктуу каталардын алдын алат, ал эми төмөнкү деңгээлдеги жиптерди башкаруудан айырмаланып.