Sobes.tech
Middle

Nəzarətçilərdən istifadə edərək çox iplikli işləməyi necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

iOS-da çox ipli işləməyi həyata keçirmək üçün növbələrdən istifadə olunur GCD (Grand Central Dispatch) və ya Operation Queues texnologiyaları ilə.

GCD (Grand Central Dispatch)

GCD aşağı səviyyəli C API-dir və paralel tapşırıqları idarə etmək üçün dispatch növbələrindən istifadə edir.

GCD-nin əsas anlayışları:

  • Dispatch növbələri (Dispatch Queues): Kod bloklarının (tapşırıqların) icrasını idarə edən məlumat strukturları. Onlar ardıcıl (serial) və ya paralel (concurrent) ola bilər.
  • Qlobal paralel növbələr (Global Concurrent Queues): Sistemin mövcud olan növbələri, prioritetə (qos - Quality of Service) görə fərqlənir.
  • Əsas növbə (Main Queue): Bu ardıcıl növbədir və əsas UI axını ilə əlaqələndirilmişdir. İstifadəçi interfeysinin yenilənməsi üçün istifadə olunur.

GCD-dən istifadə nümunəsi:

import Foundation

// Yüksək prioritetli qlobal paralel növbəni əldə edin
let globalQueue = DispatchQueue.global(qos: .userInitiated)

// Əsas növbəni əldə edin
let mainQueue = DispatchQueue.main

// Qlobal növbədə asinxron tapşırıq icra edin
globalQueue.async {
    // Uzunmüddətli tapşırığı yerinə yetirin...
    print("Fonda icra olunur")

    // UI yeniləmək üçün əsas növbəyə keçin (əgər lazımdırsa)
    mainQueue.async {
        // UI-ni yeniləyin...
        print("UI əsas axında yenilənir")
    }
}

// Özəl ardıcıl növbə yaradın və istifadə edin
let serialQueue = DispatchQueue(label: "com.example.mySerialQueue")

serialQueue.async {
    print("Tapşırıq 1 ardıcıl növbədə")
}

serialQueue.async {
    print("Tapşırıq 2 ardıcıl növbədə") // Tapşırıq 1-dən sonra icra olunacaq
}

Operation Queues

Operation Queues GCD üzərində yüksək səviyyəli abstraksiyadır və Operation obyektlərinə əsaslanır.

Operation Queues-un əsas anlayışları:

  • Əməliyyatlar (Operation): İş vahidini təmsil edən obyektlər. Operation-un subclassları ola bilər (məsələn, BlockOperation, URLSessionDownloadTask). Əməliyyatlar arasında asılılıqları dəstəkləyirlər.
  • Əməliyyat növbələri (OperationQueue): Operation-un icrasını idarə edən obyektlər. Onlar eyni vaxtda icra ediləcək əməliyyatların sayını məhdudlaşdıra bilərlər (maxConcurrentOperationCount).

Operation Queues istifadə nümunəsi:

import Foundation

// Əməliyyat növbəsini yaradın
let operationQueue = OperationQueue()

// İstəyə bağlı: eyni vaxtda icra ediləcək əməliyyatların sayını məhdudlaşdırın
operationQueue.maxConcurrentOperationCount = 3

// Əməliyyat yaradın
let operation1 = BlockOperation {
    print("Əməliyyat 1 icra olunur")
    // Tapşırığı yerinə yetirin...
}

let operation2 = BlockOperation {
    print("Əməliyyat 2 icra olunur")
    // Tapşırığı yerinə yetirin...
}

// Alternativ üsul: blok ilə əməliyyat yaradın
let operation3 = BlockOperation {
    print("Əməliyyat 3 icra olunur")
    // Tapşırığı yerinə yetirin...
}

// Tamamlama blokunu əlavə edin
operation3.completionBlock = {
    print("Əməliyyat 3 tamamlandı")
}

// Asılılıqları əlavə edin (Əməliyyat 2, Əməliyyat 1-dən sonra icra olunacaq)
operation2.addDependency(operation1)

// Əməliyyatları növbəyə əlavə edin
operationQueue.addOperation(operation1)
operationQueue.addOperation(operation2)
operationQueue.addOperation(operation3)

// Əməliyyatlar asinxron olaraq başlayacaq, mövcud ip və asılılıqlara görə

GCD və Operation Queues müqayisəsi:

Xüsusiyyət GCD (Grand Central Dispatch) Operation Queues
Abstraksiya səviyyəsi Aşağı (C API) Yüksək (Objective-C/Swift sinifləri)
Tapşırıq idarəetməsi Bloklar və ya funksiyalar Operation obyektləri
Asılılıqlar Əl ilə idarəetmə tələb edir (məsələn, DispatchGroup) addDependency ilə daxili dəstək
Ləğv etmək Çətin Asan (cancel() metodu ilə)
Vəziyyət Aydın vəziyyət yoxdur Vəziyyətləri dəstəkləyir (hazır, icra, tamamlandı)
Nəzarət Əl ilə həyata keçirilir KVO (Key-Value Observing) dəstəklənir
Çətinlik Sadə, ləğv edilməyən tapşırıqlar üçün uyğundur Çətin, asılı və ləğv edilə bilən tapşırıqlar üçün uyğundur

GCD və Operation Queues arasında seçim tapşırığın xüsusiyyətlərindən asılıdır. GCD daha yüngül və sadə fon tapşırıqları üçün uyğundur. Operation Queues isə daha çevik idarəetmə, asılılıqlar və ləğv imkanları təqdim edir və daha mürəkkəb tapşırıq idarəetmə ssenariləri üçün üstün sayılır. Əksər hallarda, Operation Queues GCD üzərində qurulur.