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.