Kotlin Coroutines'e Giriş
Eşyordam, eşzamansız olarak yürütülen kodu basitleştirmek için Android'de kullanabileceğiniz bir eşzamanlılık tasarım modelidir.
Coroutines = Co + Rutinler
Burada Co işbirliği anlamına gelir ve Rutinler işlevler anlamına gelir.
Eşzamansız programlarda , birden çok görev, diğer görevlerin tamamlanmasını beklemeden ayrı iş parçacıklarında paralel olarak yürütülür. İş parçacıkları pahalı bir kaynaktır ve çok fazla iş parçacığı, yüksek bellek tüketimi ve CPU kullanımı nedeniyle performans yüküne yol açar.
Coroutines'in özellikleri nelerdir?
- Hafif : Eşyordamın çalıştığı iş parçacığını engellemeyen süspansiyon desteği sayesinde tek bir iş parçacığında birçok eşyordamı çalıştırabilirsiniz. Askıya alma, birçok eşzamanlı işlemi desteklerken engellemeye göre bellek tasarrufu sağlar.
- Daha az bellek sızıntısı : Bir kapsam dahilinde işlemleri çalıştırmak için yapılandırılmış eşzamanlılık kullanın.
- Yerleşik iptal desteği : İptal , işleyen korotin hiyerarşisi aracılığıyla otomatik olarak yayılır.
- Jetpack entegrasyonu : Birçok Jetpack kitaplığı, tam eşyordam desteği sağlayan uzantılar içerir. Bazı kitaplıklar , yapılandırılmış eşzamanlılık için kullanabileceğiniz kendi eşyordam kapsamlarını da sağlar.
“build.gradle(Module:App.app)” bağımlılıkları kısmına ekleme işlemi şu şekilde yapılır.
Coroutine Kapsamları ve Oluşturucuları
Eşyordam oluşturucular , bir eşyordam oluşturmamıza yardımcı olan işlevlerdir. Kendilerini askıya almadıkları için normal fonksiyonlardan çağrılabilirler. Üç eşyordam oluşturucu aşağıda listelenmiştir.
runBlocking : Yeni bir coroutines işlevi oluşturur ve tamamlanana kadar ana iş parçacığını bloke eder.
launch : Çalıştırdığı iş parçacığını engellemeyen ve Job nesnesini döndüren bir oluşturucu işlevidir. Bu fonksiyonu kullanmak için Coroutine kapsamı içinde olmamız gerekmektedir.
async : Çağırana bir miktar değer döndüren bir eşyordam oluşturucudur. async, bir değer döndüren eşzamansız bir görevi gerçekleştirmek için kullanılabilir. Kotlin açısından bu değer bir Deferred<T> değeridir.
Launch ve async arasındaki farklar nelerdir?
GlobalScope ve runBlocking arasındaki farklar nelerdir?
GlobalScope bağımsızdır ve iş parçacığı bitse bile çalışmaya devam eder. Tüm uygulama yaşam döngüsü boyunca çalışır.
Yukarıdaki kodda olduğu gibi GlobalScope thread bitse bile çalışmaya devam eder.
Askıya Alma İşlevi nedir?
Askıya Alma işlevi yazmak, normal bir işlev yazmaya benzer. Tek fark, yalnızca askıya alma anahtar sözcüğünü getirerek başlamalarıdır. İç eşyordamlar, çalıştırılabilen işlevlerdir. Askıya alma işlevi, başlatılabilen, duraklatılabilen ve devam ettirilebilen bir işlevdir. Askıya alma işlevleri hakkında hatırlanması gereken en önemli noktalardan biri, yalnızca bir eşyordam veya başka bir askıya alma işlevinden çağrılabilmelerine izin verildiğidir.
Başlatma işlevini kullanarak , kodun geri kalanıyla eşzamanlı olarak yeni bir eş program başlatılır.
runBlocking ayrıca yeni bir eş program başlatır. runBlocking
sırasında, geçerli iş parçacığı: main, işlevin gövdesindeki tüm kod yürütülene kadar engellenir.
Askıya alınan işlevlere, çalışanGörev işlevleri denir .
Alttaki iş parçacığını bloke etmeden eşyordamı askıya alır, ancak diğer eşyordamların kendi kodları için alttaki iş parçacığını çalıştırmasına ve kullanmasına izin verir.
Coroutine Dispatcher'lar nedir?
Coroutine Dispatcher , eşyordamın çalışacağı iş parçacığına karar veren yapıdır.
Reaktif çerçevelerde (ör. rxJava) dispeçerlerin, zamanlayıcı nesnesine karşılık geldiğini düşünebiliriz.
Eşyordamların her zaman belirli bir bağlamda başlatıldığı bilinmektedir ve bu bağlam, eşyordamın hangi iş parçacığında başlatılacağını açıklar. Genel olarak, eşyordamı herhangi bir parametre iletmeden GlobalScope kullanarak başlatabiliriz, bu, eşyordamın başlatılması gereken iş parçacığını belirtmemek. Bu yöntem bize üzerinde çok fazla kontrol sağlamaz, çünkü eşyordamımız mevcut olan herhangi bir iş parçacığında başlatılabilir, bu nedenle eşyordamlarımızın başlatıldığı iş parçacığını tahmin etmek mümkün değildir.
Başlıca 4 tip Dispatcher vardır.
- Ana Sevk Görevlisi
- IO Dağıtıcısı
- Varsayılan Dağıtıcı
- Sınırsız Sevk Görevlisi
- Dispatchers.Main — Ana Android iş parçacığında bir eşyordam çalıştırmak için bu dağıtıcıyı kullanın. Bu, yalnızca UI ile etkileşimde bulunmak ve hızlı çalışma gerçekleştirmek için kullanılmalıdır. Örnekler, askıya alma işlevlerini çağırmayı, Android UI çerçeve işlemlerini çalıştırmayı ve
LiveDatanesneleri güncellemeyi içerir. - Dispatchers.IO — Bu dağıtım programı, ana iş parçacığının dışında disk veya ağ G/Ç gerçekleştirmek için optimize edilmiştir. Örnekler, Oda bileşenini kullanmak , dosyalardan okumak veya dosyalara yazmak ve herhangi bir ağ işlemini çalıştırmaktır.
- Dispatchers.Default — Bu dağıtım programı, ana iş parçacığının dışında yoğun CPU gerektiren işleri gerçekleştirmek için optimize edilmiştir. Örnek kullanım durumları, bir listeyi sıralamayı ve JSON'u ayrıştırmayı içerir.
Kaynaklar

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































