Sobes.tech
Junior

Çok iş parçacıklı programlama nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS’te çoklu görev, uygulama sürecinin içinde birden fazla yürütme akışının (thread) kullanılmasıdır; bu, birden fazla görevi aynı anda veya pseudo-senkronize şekilde yürütmeye olanak tanır, ana UI akışını engellemeden ve arayüzün yanıt verebilirliğini koruyarak.

Prensipler ve bileşenler:

  • Thread (İplik): Süreç içinde bağımsız yürütme birimi. Kendi çağrı yığınına, kayıt kümesine sahiptir, ancak aynı süreçteki diğer ipliklerle belleği paylaşır.
  • Ana İplik (Main Thread): UI güncellemeleri ve kullanıcı olaylarının işlenmesinden sorumludur. Üzerinde uzun süren işlemler uygulamanın donmasına neden olabilir.
  • Arka Plan İplikleri (Background Threads): Ağ istekleri, hesaplamalar, veri işleme gibi kaynak yoğun görevleri ana akışı engellemeden yürütmek için kullanılır.
  • Yarış Durumu (Race Condition): İki veya daha fazla ipliğin aynı anda ortak verilere erişip değiştirmeye çalışması, öngörülemeyen sonuçlara yol açabilir.
  • Ölü Kilit (Deadlock): İki veya daha fazla ipliğin, diğerlerinin kaynakları serbest bırakmasını beklemesi durumudur; bu, hiç birinin devam edememesiyle sonuçlanır.
  • iOS Çoklu Görev Araçları:
    • GCD (Grand Central Dispatch): Kuyruklara dayalı düşük seviyeli API. İplik havuzunu yönetir ve görevleri bunlara dağıtır. Sıralı ve paralel kuyrukları destekler.
    • İşlem Kuyrukları (NSOperationQueue/Operation): GCD üzerine nesne yönelimli soyutlama. Görevler (Operation) oluşturmayı, bağımlılıkları yönetmeyi, duraklatmayı, devam ettirmeyi ve iptal etmeyi sağlar.
    • Kilitlemeler (NSLock, DispatchQueue sync): Paylaşılan kaynaklara erişimi senkronize etmek ve yarış durumlarını önlemek için mekanizmalar.

GCD kullanımı örneği:

// Arka planda görev yürütme
DispatchQueue.global(qos: .userInitiated).async {
    // Uzun süren işlem (örneğin, veri yükleme)

    // Tamamlandıktan sonra UI’yi ana akışta güncelle
    DispatchQueue.main.async {
        // UI güncellemesi
    }
}

OperationQueue kullanımı örneği:

import Foundation

// İşlem kuyruğu oluşturma
let operationQueue = OperationQueue()

// İşlem oluşturma
let operation = BlockOperation {
    // Uzun süren işlem
    print("İşlem yürütülüyor")
}

// İşlemi kuyruğa ekleme
operationQueue.addOperation(operation)

// Bağımlılık ekleyebilirsiniz
// let başkaOperation = ...
// operation.addDependency(başkaOperation)

Çoklu görev, şu nedenlerle önemlidir:

  • UI yanıt verebilirliği.
  • Paralel yürütme sayesinde performans artışı.
  • Cihaz kaynaklarının etkin kullanımı.

Çoklu görevle çalışırken, senkronizasyon sorunlarını önlemek için paylaşılan kaynaklara erişimi dikkatli yönetmek gerekir.