Sobes.tech
Middle

Ինչպե՞ս իրականացնել բազմապատկման գործառույթը օգտագործելով հերթեր։

sobes.tech AI

Պատասխան AI-ից

ԻՕՍ-ի մեջ բազմաբնույթ աշխատանքների իրականացման համար օգտագործվում են 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 — դա բարձր մակարդակի abstraction է 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 առաջարկում են ավելի մեծ ճկունություն, կախվածությունների և չեղարկման աջակցություն, ինչը նրանց դարձնում է նախընտրելի ավելի բարդ աշխատանքային կառավարման համար։