Apa itu Kotlin Coroutines ?
Pada artikel ini saya akan menulis tentang Coroutines, apa itu Coroutines ? Coroutines adalah cara untuk mengatasi masalah concurrency atau async programming, penjelasan simplenya mengupbah pemanggilan async code menjadi seperti sync code, contoh seperti ini
Retrofit
Retrofit + Coroutines
Kotlin teams sendiri menyebut coroutines adalah lightweight thread, jadi coroutines ini mirip thread tapi ada perbedaannya, persamaan antara coroutines dan thread adalah :
- sama-sama sequence of instruction
- multiple coroutines atau thread dapat dijalankan secara concurent
- multiple coroutines atau thread sharing resource memory
dan untuk perbedaannya adalah :
- coroutines disebut lightweight thread
- coroutines jalan diatas thread
Penjelasan mengenai lightweight thread, thread biasanya dibandingkan dengan lamanya waktu yang digunakan untuk pemrosesan data, jadi lightweight thread adalah thread yang membutuhkan waktu lebih singkat dalam pemrosesannya sedangkan heavyweight thread adalah kebalikannya butuh waktu lebih banyak untuk pemrosesannya. Dan selain itu thread akan selalu dihandle oleh operating system sedangkan coroutines dihandle oleh user.
Coroutines tidak hanya ada pada bahasa pemrograman kotlin, namun juga ada dibahasa lain seperti C#, Scala, Clojure dan lain-lain.
Ada 2 jenis coroutines yaitu :
- Stackless
- Stackfull
Kotlin menggunakan coroutines yang berjenis stackless. link terkait stackless & stackfull link
Pada android coroutines dapat digunakan untuk mengatasi 2 problem utama :
- Menghandle heavy task yang dapat menghalangi main thread sehingga mengakibatkan aplikasi lagging
- Memberikan keamanan ketika memanggil heavy task dari main thread contoh : networking, write ke database
Contoh Coroutine
Diatas adalah contoh kode kotlin yang menggunakan coroutines, jika kode tersebut dijalankan maka akan menghasilkan sebagai berikut :
Halooo
Dunia . . .
Pada contoh diatas, pada kode 1
saya menggunakan GlobalScope.launch
apakah ini ? untuk menjalankan coroutine dibutuhkan Coroutine Scope dan pada contoh diatas saya menggunakan GlobalScope
yang berarti lifecycle coroutinenya mengikuti lifecycle seluruh aplikasi.
pada no 2
saya memanggil suspending function
untuk melakukan delay selama 2sec, pada no 3
saya outputkan text, jika program dijalankan maka yang akan muncul pertama kali adalah kode no 4
hal ini karena kode 1 dijalankan pada coroutine, apabila kita tidak menuliskan Thread.sleep(2000) yang mana maksudnya adalah untuk mempause thread selama 2 sec, maka program tidak akan pernah menampilkan kata Dunia . . .
Bersambung
Leave a Comment