Middle
Grand Central Dispatch (GCD) ичинде кайсы инструменттер бар?
sobes.tech AI
AIден жооп
GCDтин негизги аспаптары:
- Диспетчердик кезектер (Dispatch Queues): Коддун блокторун аткарууну башкаруу. Алар болушу мүмкүн:
- Тизмектүү (Serial): Иштерди бирден аткарат, тартибин камсыз кылуу үчүн.
- Көптөгөн (Concurrent): Иштерди бир убакта аткарат (жарактуу системдик ресурстар чегинде).
- Глобалдык көптөгөн кезектер (Global Concurrent Queues): Жүйө тарабынан берилет, алдын ала аныкталган артыкчылыктарга ээ (QoS).
- Негизги кезек (Main Queue): Специальдүү тизмектүү кезек, колдонмонун негизги агымына байланыштуу. UI менен иштөө үчүн колдонулат.
- Диспетчердик топтор (Dispatch Groups): Асинхрондук иштердин бүтүшүн көзөмөлдөөгө мүмкүндүк берет.
- Барьер семантикасы (Barrier Semantics): Көптөгөн кезектер үчүн, "барьер" түзүүгө мүмкүндүк берет, ал барьерден кийин гана иштер аткарылат, ал барьер өтүлгөнчө.
- Диспетчердик булактары (Dispatch Sources): Системдик окуяларга жооп кайтарууга мүмкүндүк берет (файл операциялары, сигналдар, таймерлер жана башка).
- DispatchWorkItem: Код блокун камтыйт жана кезекке жөнөтүлүшү, жокко чыгарылышы жана аяктоо жөнүндө кабардар болушу мүмкүн.
Түзүү мисалы — тизмектүү кезек түзүү жана ишти аткаруу:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
serialQueue.async {
// Асинхрон түрдө аткарылат
print("Иш тизмектүү кезекте аткарылды")
}
Диспетчердик топту колдонуу мисалы:
let group = DispatchGroup()
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
group.enter() // Топко кирүү
concurrentQueue.async {
// Иш 1
print("Иш 1 аяктады")
group.leave() // Топтон чыгуу
}
group.enter() // Топко кирүү
concurrentQueue.async {
// Иш 2
print("Иш 2 аяктады")
group.leave() // Топтон чыгуу
}
group.notify(queue: .main) {
// Бардык иштер аяктагандан кийин ишке ашырылат
print("Бардык иштер топто аяктады")
}
DispatchWorkItem колдонуу мисалы:
let workItem = DispatchWorkItem {
print("WorkItem аткарылды")
}
DispatchQueue.global().async(execute: workItem)
// workItem.cancel() // Аны аткаруудан мурун жокко чыгарыш мүмкүн