Sobes.tech
Middle

Көп жиптүү ишти ишке ашыруу үчүн кезектерди колдонуу менен кандай ишке ашыруу керек?

sobes.tech AI

AIден жооп

iOS-та көп иштөөчү программаларды ишке ашыруу үчүн GCD (Grand Central Dispatch) же Operation Queues технологиялары колдонулат.

GCD (Grand Central Dispatch)

GCD — бул диспетчердик кезектерди колдонуп параллелдүү тапшырмаларды башкаруу үчүн төмөн деңгээлдүү C API.

GCD негизги түшүнүктөрү:

  • Диспетчердик кезектер (Dispatch Queues): Код блокторун (тапшырмаларды) ишке ашырууну башкарган маалымат структуралары. Алар последовательдүү (serial) же параллелдүү (concurrent) болушу мүмкүн.
  • Глобалдык параллелдүү кезектер (Global Concurrent Queues): Туташ системдик кезектер, алар стандарттык түрдө жеткиликтүү жана ар кандай приоритеттерге (qos - Quality of Service) ээ.
  • Негизги кезек (Main Queue): Бул — негизги UI агымына байланышкан последовательдүү кезек. Колдонуучунун интерфейсин жаңыртуу үчүн колдонулат.

GCD колдонуу мисалы:

import Foundation

// Жогорку приоритет менен глобалдык кезек алуу
let globalQueue = DispatchQueue.global(qos: .userInitiated)

// Негизги кезек алуу
let mainQueue = DispatchQueue.main

// Глобалдык кезекте асинхрон тапшырма ишке ашыруу
globalQueue.async {
    // Узак иштеген тапшырма...
    print("Фондук агымда ишке ашырылууда")

    // UI жаңыртуу үчүн негизги кезекке өтүү (керек болсо)
    mainQueue.async {
        // UI жаңыртуу...
        print("Негизги агымда UI жаңыртыла жатат")
    }
}

// Колдонуучу белгилүү бир кезек түзүү жана колдонуу
let serialQueue = DispatchQueue(label: "com.example.mySerialQueue")

serialQueue.async {
    print("Биринчи тапшырма последовательдүү кезекте")
}

serialQueue.async {
    print("Экинчи тапшырма последовательдүү кезекте") // Биринчи тапшырмадан кийин ишке ашат
}

Operation Queues

Operation Queues — бул GCD үстүндө жогорку деңгээлдүү абстракция, ал Operation объекттерине негизделген:

Operation Queues негизги түшүнүктөрү:

  • Операциялар (Operation): Иштин бирдигин көрсөтүүчү объекттер. Алар Operation классынын подкласстары болушу мүмкүн (мисалы, BlockOperation, URLSessionDownloadTask). Алар операциялардын ортосундагы көзкарандылыктарды колдойт.
  • Операциялар кезектери (OperationQueue): Бул — Operation аткарууну башкарган объект. Алар бир учурда аткарылуучу операциялардын максимал санын чектөө үчүн конфигурацияланат (maxConcurrentOperationCount).

Operation Queues колдонуу мисалы:

import Foundation

// Операциялар кезек түзүү
let operationQueue = OperationQueue()

// Керек болсо: бир учурда аткарылуучу операциялар санын чектөө
operationQueue.maxConcurrentOperationCount = 3

// Операция түзүү
let operation1 = BlockOperation {
    print("Операция 1 ишке ашууда")
    // Ишти аткаруу...
}

let operation2 = BlockOperation {
    print("Операция 2 ишке ашууда")
    // Ишти аткаруу...
}

// Блок менен операция түзүү (альтернативдүү ыкма)
let operation3 = BlockOperation {
    print("Операция 3 ишке ашууда")
    // Ишти аткаруу...
}

// Аяктамачы блок кошуу
operation3.completionBlock = {
    print("Операция 3 аяктады")
}

// Операциялардын көзкарандылыктарын белгилөө (Операция 2, Операция 1ден кийин ишке ашат)
operation2.addDependency(operation1)

// Операцияларды кезекке кошуу
operationQueue.addOperation(operation1)
operationQueue.addOperation(operation2)
operationQueue.addOperation(operation3)

// Операциялар асинхрондуу түрдө аткарылат, жеткиликтүү агымдар жана көзкарандылыктарга жараша

GCD жана Operation Queues салыштырмасы:

Өзгөчөлүк GCD (Grand Central Dispatch) Operation Queues
Абстракция деңгээли Төмөн (C API) Жогорку (Objective-C/Swift класстары)
Тапшырмаларды башкаруу Блоктор же функциялар Operation объекттери
Көзкарандылыктар Кол менен башкаруу талап кылынат (мисалы, DispatchGroup) addDependency аркылуу встроенная колдоо
Жокко чыгару Кыйынчылык Жөнөкөй (метод cancel() аркылуу)
Абал Ачык абал жок Статустарды колдоо (дайын, ишке ашыруу, аяктоо)
Көзөмөл Кол менен ишке ашыруу талап кылынат KVO (Key-Value Observing) колдоо
Кыйынчылык Жөнөкөй, жокко чыгарылбайт иштер үчүн ылайыктуу Кыйын, көзкарандылыктар жана жокко чыгарылуучу иштер үчүн ылайыктуу

GCD жана Operation Queues ортосунда тандоо иштин өзгөчөлүгүнө жараша болот. GCD — жеңил жана жөнөкөй фондук тапшырмалар үчүн ылайыктуу. Operation Queues — көбүрөөк ийкемдүүлүк, көзкарандылыктар жана жокко чыгаруу мүмкүнчүлүгүн камсыздайт, бул алардын көбүрөөк татаал сценарийлер үчүн артыкчылыктуу кылат. Көпчүлүк учурларда Operation Queues GCD үстүндө курулат.