Swift'te GCD ve NSOperation - 1

Güncelleme tarihi: 17 Eki 2021

Bu yazıda GCD ve NSOperation ile ilgili detaylı bilgi vereceğim. Bu makale 3 bölümden oluşacak. Bu bölümde GCD'yi derinlemesine anlatıyor olacağım.




Grand Central Dispatch (GCD)


Verilen işleri eşzamansız veya eşzamanlı olarak yönetmek için kullandığımız bir API'dir. GCD'yi, uygulamanın yanıt verme hızını iyileştirebilmek adına ağır görevleri arka planda yönetmek için kullanılırız.


Thread ve Queues


DispatchQueue ve Thread hakkında mutlaka bir şeyler gördünüz ya da duydunuz, eğer hiç duymadıysanız çok yakında duyacağınızı söyleyebilirim.


Thread ve Queue yazılım dünyasında olmazsa olmazlarımızın arasında yer alan bir yapıdır. Bu kısımda DispatchQueue ve Thread'in ne olduğunu, bunların iş akınışınızda ne faydaları olduğunu ve bunları en iyi şekilde nasıl kullanırız'ı öğreneceğiz.


Thread


Birden fazla işin eşzamanlı olarak yapılmasına olanak sağlayan yapıya Thread denir. Her bir thread'in görev sayısı maksimum birdir ama bu thread içersinde başka thread'ler tanımlayabiliriz. Birden fazla iç içe thread'lerin kullanıldığı duruma ise multi-threading denir. Thread'ler aslında hayat kurtarıcı öneme sahiptir. Yapılacak işi thread'lere bölerek hedeflediğimizden çok daha hızlı ya da kontrollu bir şekilde işlerin tamamlanmasına olanak sağlayabiliriz.


iOS Cihazlarımızın CPU'sunda ne kadar çekirdek varsa aynı anda o kadar Thread açabiliriz. Cihazımızda ne kadar fazla çekirdek varsa o kadar hızlı bir cihaza sahibiz anlamına gelmektedir.


Bir iOS uygulamasında birden fazla Thread'e bölerek çalışmamızın bize sağladığı avantajları şöyle sıralayabiliriz:


A. Yapılacak işleri parçalayarak eşzamanlı çalışmalarına olanak sağlar. Kuyrukta çalıştırmaktansa eşzamanlı olarak çalıştırılan işlerin kuyruğa göre çok daha hızlı bitmesine neden olur.

B. Main Thread'e müdahale etmenden, yeni bir thread'de süreçleri ilerleterek kullanıcının süreçten haberi olmadan işlemleri bitirebilir ve uygulamanın bu iş sürecinden etkilenmediğini yani yavaşlamadığını görebilirler. Performans anlamında büyük bir avantaj sağlamaktadır.

C. İş parçacıklarının optimizasyonu tamamen Apple'a aittir. Biz sadece API üzerinden kullanımını yaparız. Eğer bu kontrol Apple'a değil de bizde olmasını istiyorsak NSOperation'ı kullanmamız gerekmektedir.


DispatchQueue


Bir işi yaparken, işin tipine göre işi bir veya daha fazla thread'e bölerek sırayla tamamlamasına "DispatchQueue nesnesi" dersek yanlış bir tanım yapmış olmayız. DispatchQueue ilk giren ilk çıkar mantığında (FIFO) çalışır. Eşzamanlı ya da eşzamansız olarak çalışır, senkron ve asenkron durumları ele almada bize yardım eden Apple'in hazırladığı bir API grubudur.


Main Queue