Sobes.tech
Middle

Grand Central Dispatch деген эмне жана ал iOS өнүктүрүүдө кандай колдонулат?

sobes.tech AI

AIден жооп

Grand Central Dispatch (GCD) — төмөн деңгээлдүү API көптөгөн жиптерди башкаруу үчүн, ал системдик жиптердин пулун камсыз кылат жана алардын үстүндө тапшырмаларды пландаштырат.

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

  • Dispatch Queues: Код блоктору (тапшырмалар) үчүн жайгаштырылган кезектер.
    • Serial Queues: Түзүлүшү боюнча блокторду бирден ишке ашырат.
    • Concurrent Queues: Блокторду параллелдүү ишке ашырат, бирок кошуу тартибинде.
  • Tasks (Blocks): Иш бирдиктери, алар Dispatch Queuesка жөнөтүлөт.
  • Dispatch Sources: Жүйөөнүн окуяларын көзөмөлдөө (файлдар, сокеттер, сигналдар), алардын пайда болушунда блокторду чакырат.

Колдонуу:

  1. Фондук операцияларды аткаруу: Тармактан маалымат жүктөө, сүрөттөрдү иштетүү, татаал эсептөөлөр, негизги жипти (UI) блоктобоого.

    DispatchQueue.global(qos: .userInitiated).async {
        // Көңүл бурган операцияны аткаруу
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // UI жаңыртуу негизги жипте
            updateUI(with: processedData)
        }
    }
    
  2. Тапшырмаларды пландаштыруу: Кийинге калтыруу же мезгил-мезгили менен аткаруу.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Бул код 2 секунддан кийин ишке ашырылат
        print("Кийинге калтырылган аткаруу")
    }
    
  3. Маалыматка жетүүнү синхрондоо: Serial queues же DispatchQueue.concurrentPerform колдонуу менен параллелдүү жетүүнү көзөмөлдөө.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // .barrier колдонуу жазуу үчүн эксклюзивдүү жетүүнү камсыз кылуу
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // синхрон окуу
            for item in sharedArray {
                print(item)
            }
        }
    }
    

POSIX жиптерине салыштырганда артыкчылыктары:

  • Көбүрөөк колдонууга жеңил: Жогорку деңгээлдеги абстракция.
  • Ишке ашыруу эффективдүүлүгү: GCD системдик жиптердин пулун натыйжалуу башкарат, чыгымдарды азайтат.
  • Масштабдоо мүмкүнчүлүгү: Автоматтык түрдө процессор ядролоруна ылайыкташтырылган.

QoS (Сапаттын сапаты) түрлөрү: GCD планировщусунун тапшырмага артыкчылыгын аныктайт.

QoS Колдонуу
userInteractive UI жаңыртуулары, анимациялар, тез реакция
userInitiated Колдонуучу тарабынан башталган тапшырмалар, тез аяктоо талап кылынган (жүктөө, сүрөт иштетүү)
default Өгүмү боюнча артыкчылык, userInitiated жана utility ортосунда
utility Узак мөөнөттүү тапшырмалар, шұғылдуулуксыз (жүктөө, индекстеүү)
background Фондук тапшырмалар, колдонуучуга көрүнбөйт (көчүрүү, синхрондоо)
unspecified Артыкчылык белгиленбеген, системанын аныктамасы