Sobes.tech
Middle

Qutilar yordamida ko'p ipli ishlashni qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

iOSda ko'p ipli ishlashni amalga oshirish uchun navbatlardan foydalaniladi GCD (Grand Central Dispatch) yoki Operation Queues texnologiyalari bilan.

GCD (Grand Central Dispatch)

GCD — bu parallel vazifalarni boshqarish uchun past darajali C API bo'lib, u dispatcher navbatlaridan foydalanadi.

GCD asosiy tushunchalari:

  • Dispatcher navbatlar (Dispatch Queues): Kod bloklarini (vazifalarni) bajarishni boshqaradigan ma'lumotlar tuzilmalari. Ular ketma-ket (serial) yoki parallel (concurrent) bo'lishi mumkin.
  • Global parallel navbatlar (Global Concurrent Queues): Tizim navbatlari, odatda mavjud bo'lib, ular prioritetga (qos - Quality of Service) qarab farqlanadi.
  • Asosiy navbat (Main Queue): Bu ketma-ket navbat bo'lib, UI ning asosiy oqimiga bog'langan. Foydalanuvchi interfeysini yangilash uchun ishlatiladi.

GCDdan foydalanish misoli:

import Foundation

// Yuqori prioritetli global parallel navbatni olish
let globalQueue = DispatchQueue.global(qos: .userInitiated)

// Asosiy navbatni olish
let mainQueue = DispatchQueue.main

// Global navbatda vazifani asinxron bajarish
globalQueue.async {
    // Uzun davom etadigan vazifani bajarish...
    print("Fon oqimida bajarilmoqda")

    // UI ni yangilash uchun asosiy navbatga o'tish (agar kerak bo'lsa)
    mainQueue.async {
        // UI ni yangilash...
        print("Asosiy oqimda UI yangilanmoqda")
    }
}

// Foydalanuvchi tomonidan yaratilgan ketma-ket navbatni yaratish va foydalanish
let serialQueue = DispatchQueue(label: "com.example.mySerialQueue")

serialQueue.async {
    print("Ketma-ket navbatdagi 1 vazifa")
}

serialQueue.async {
    print("Ketma-ket navbatdagi 2 vazifa") // 1 vazifadan keyin bajariladi
}

Operation Queues

Operation Queues — bu GCD ustidan yuqori darajali abstraktsiya bo'lib, Operation obyektlariga asoslangan.

Operation Queues asosiy tushunchalari:

  • Operatsiyalar (Operation): Bu vazifa birligini ifodalovchi obyektlar. Ular Operation ning subclasslari bo'lishi mumkin (masalan, BlockOperation, URLSessionDownloadTask). Ular o'zaro bog'liqliklarni qo'llab-quvvatlaydi.
  • Operation navbatlari (OperationQueue): Bu Operation bajarilishini boshqaradigan obyekt. Ular maksimal bir vaqtning o'zida bajariladigan operatsiyalar sonini cheklash uchun sozlanishi mumkin (maxConcurrentOperationCount).

Operation Queuesdan foydalanish misoli:

import Foundation

// Operation navbatini yaratish
let operationQueue = OperationQueue()

// Ixtiyoriy: bir vaqtning o'zida bajariladigan operatsiyalar sonini cheklash
operationQueue.maxConcurrentOperationCount = 3

// Operatsiya yaratish
let operation1 = BlockOperation {
    print("Operatsiya 1 bajarilmoqda")
    // Vazifani bajarish...
}

let operation2 = BlockOperation {
    print("Operatsiya 2 bajarilmoqda")
    // Vazifani bajarish...
}

// Alternativ usul: blok bilan operatsiya yaratish
let operation3 = BlockOperation {
    print("Operatsiya 3 bajarilmoqda")
    // Vazifani bajarish...
}

// Yakuniy blokni qo'shish (completion block)
operation3.completionBlock = {
    print("Operatsiya 3 tugadi")
}

// Bog'liqliklarni qo'shish (Operatsiya 2, 1dan keyin bajariladi)
operation2.addDependency(operation1)

// Operatsiyalarni navbatga qo'shish
operationQueue.addOperation(operation1)
operationQueue.addOperation(operation2)
operationQueue.addOperation(operation3)

// Operatsiyalar asinxron ravishda bajarila boshlaydi, mavjud iplar va bog'liqliklarga qarab

GCD va Operation Queues taqqoslamasi:

Xususiyatlar GCD (Grand Central Dispatch) Operation Queues
Abstraktsiya darajasi Past (C API) Yuqori (Objective-C/Swift klasslari)
Vazifalarni boshqarish Bloklar yoki funksiyalar Operation obyektlari
Bog'liqliklar Qo'lda boshqarish talab etiladi (masalan, DispatchGroup) addDependency yordamida ichki qo'llab-quvvatlash
Bekor qilish Qiyin Oson (cancel() metodidan foydalanish)
Holat Aniq holat yo'q Holatlarni qo'llab-quvvatlaydi (ready, executing, finished)
Kuzatuv Qo'lda amalga oshiriladi KVO (Key-Value Observing) yordamida qo'llab-quvvatlanadi
Murakkablik Oddiy, bekor qilinmaydigan vazifalar uchun mos Murakkab, bog'liq va bekor qilinadigan vazifalar uchun mos

GCD va Operation Queues orasidan tanlov vazifaning xususiyatlariga bog'liq. GCD yengil va oddiy fon vazifalari uchun mos, Operation Queues esa bog'liqliklar va bekor qilish imkoniyatlari bilan murakkab vazifalar uchun afzalroq. Ko'p hollarda, Operation Queues GCD ustida quriladi.