Zamanlayıcılar ve İş Parçacıkları
Yürütmeyi receive(on:) ve subscribe(on:) ile denetleyin.
Zamanlayıcılar ve İş Parçacıkları, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Combine'da Zamanlayıcılar
Birleştirme içindeki bir zamanlayıcı, işin ne zaman ve nerede çalışacağını, yani işleçleri hangi iş parçacığının veya kuyruğun çalıştıracağını ve değerleri abonelere ileteceğini tanımlar.
Zamanlayıcıları denetlemek, kullanıcı arayüzü güncellemelerini ana iş parçacığında tutmak ve ağır işleri ondan uzaklaştırmak için gereklidir.
İki Temel İşleç
Birleştirme, iş parçacığı kullanımını denetlemek için iki işleç sunar:
- subscribe(on:) — aboneliğin ve üst akış işinin nerede başlayacağını denetler
- receive(on:) — alt akış değerlerinin nereye iletileceğini denetler
Bu işleçler akışın farklı uçlarını etkiler.
receive(on:)
receive(on:), kendisinden sonra gelen her şeyi belirtilen zamanlayıcıya taşır. En yaygın kullanım, kullanıcı arayüzünü güncellemeden önce ana kuyruğa dönmektir.
apiClient.fetchUser(id: 1)
.receive(on: DispatchQueue.main)
.sink { user in
self.nameLabel.text = user.name
}
.store(in: &cancellables)subscribe(on:)
subscribe(on:), yayımlayıcının üretmeye başladığı ve üst akış işleçlerinin çalıştığı iş parçacığını denetler. Pahalı kurulumu ana iş parçacığından uzaklaştırmak için kullanın.
heavyPublisher
.subscribe(on: DispatchQueue.global(qos: .userInitiated))
.receive(on: DispatchQueue.main)
.sink { result in
self.update(result)
}
.store(in: &cancellables)subscribe(on:) ve receive(on:)
Yönleri hatırlayın:
- subscribe(on:), üst akışı etkiler; işin nerede başladığını belirler
- receive(on:), alt akışı etkiler; sonuçların nereye iletildiğini belirler
Tipik bir düzen, arka plandaki işler için subscribe(on:), ana iş parçacığına iletim için receive(on:) kullanır.
Zamanlayıcı Olarak DispatchQueue
DispatchQueue, Scheduler protokolüne uyar. DispatchQueue.main ana iş parçacığına iletim yapar; global kuyruklar arka planda eşzamanlı olarak çalışır.
let background = DispatchQueue.global(qos: .background)
publisher
.map { expensiveTransform($0) }
.subscribe(on: background)
.receive(on: DispatchQueue.main)
.sink { self.render($0) }
.store(in: &cancellables)Zamanlayıcı Olarak RunLoop
RunLoop, bir iş parçacığının çalışma döngüsüne bağlı başka bir zamanlayıcıdır. RunLoop.main, kullanıcı arayüzü olaylarıyla eşgüdümlü olarak iletim yapar; bu durum kaydırma duyarlılığı gibi konularda önemli olabilir.
timerPublisher
.receive(on: RunLoop.main)
.sink { _ in
self.tick()
}
.store(in: &cancellables)DispatchQueue ve RunLoop Karşılaştırması
İkisi de ana iş parçacığına iletim yapabilir, ancak aralarında ince farklar vardır:
- DispatchQueue.main — kaydırma izleme sırasında bile görev zamanlar
- RunLoop.main — çalışma döngüsü izleme modundayken işi erteler
Eşzamansız işlerden sonra yapılan çoğu kullanıcı arayüzü güncellemesi için DispatchQueue.main daha güvenli varsayılandır.
Zamanlayıcı Zamanlama İşleçleri
debounce, throttle ve delay gibi işleçlerin tümü, zamanlamalarını hangi kuyruğun yöneteceğine karar veren bir zamanlayıcı bağımsız değişkeni alır.
searchTextPublisher
.debounce(for: .milliseconds(300), scheduler: DispatchQueue.main)
.sink { query in
self.runSearch(query)
}
.store(in: &cancellables)Yaygın İş Parçacığı Hatası
Kullanıcı arayüzünü ana iş parçacığı dışında güncellemek çökmelere veya görüntü bozulmalarına neden olur. Arka plandaki bir yayımlayıcıdan sonra receive(on: DispatchQueue.main) kullanmayı unutursanız sink arka plandaki bir iş parçacığında çalışabilir.
Kullanıcı arayüzüne giden değerleri her zaman ana zamanlayıcıda iletin.
Hepsini Bir Araya Getirme
Sağlam bir akış işi arka planda başlatır, orada işler ve ardından görüntülenmek üzere ana iş parçacığına iletir.
imageURLPublisher
.subscribe(on: DispatchQueue.global())
.flatMap { url in downloadImage(url) }
.map { resize($0) }
.receive(on: DispatchQueue.main)
.sink { self.imageView.image = $0 }
.store(in: &cancellables)Hızlı Kontrol
Zamanlayıcılarla ilgili bilginizi sınayın.
Özet
Birleştirme'de iş parçacığı kullanımını denetlemeyi öğrendiniz:
- subscribe(on:) — üst akış işinin nerede başladığını belirler
- receive(on:) — sonuçların nereye iletildiğini belirler
- Zamanlayıcı olarak DispatchQueue ve RunLoop
- Kullanıcı arayüzü güncellemelerini her zaman ana iş parçacığında iletin
Doğru zamanlama, uygulamaların duyarlı kalmasını ve çökmemesini sağlar.
Sıkça Sorulan Sorular
“Zamanlayıcılar ve İş Parçacıkları” dersi ücretsiz mi?
Evet — “Zamanlayıcılar ve İş Parçacıkları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Zamanlayıcılar ve İş Parçacıkları” dersinde ne öğreneceğim?
Yürütmeyi receive(on:) ve subscribe(on:) ile denetleyin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Zamanlayıcılar ve İş Parçacıkları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Akışları Dönüştürme ve Birleştirme
- Zamanlayıcılar ve İş Parçacıkları
- Hata İşleme Operatörleri
- Özel Yayıncılar ve Aboneler