Memasuki modul terakhir ini, kita akan mempelajari dasar concurrency pada Kotlin hingga alasan mengapa developer wajib mencoba Kotlin Coroutines. Concurrency merupakan sebuah topik yang cukup dalam. Jika dibahas secara menyeluruh mungkin tidak akan cukup di akademi ini. Maka dari itu, modul ini adalah pengantarnya. Diharapkan setelah memahami materi ini, pembaca dapat mengetahui gambaran apa itu concurrency dan perbedaannya pada Kotlin dibandingkan bahasa pemrograman lainnya.
Concurrency adalah beberapa proses yang terjadi secara bersamaan dalam suatu sistem. Concurrency merupakan suatu fenomena alami yang umum terjadi. Seperti halnya di dunia nyata, banyak kegiatan yang dilakukan pada waktu yang bersamaan. Dengan demikian, ketika kita ingin mengembangkan sebuah sistem untuk membantu kegiatan nyata, tentunya kita harus peduli dengan yang namanya concurrency.
Arus lalu lintas bisa menjadi ilustrasi yang tepat untuk menggambarkan proses concurrency. Lalu lintas paralel di jalan yang berbeda hanya akan menimbulkan interaksi dan potensi masalah yang kecil antar kendaraan. Berbeda dengan lalu lintas padat yang biasanya kita jumpai pada persimpangan. Pastinya interaksi dan potensi masalah antar kendaraan akan lebih besar dan membutuhkan koordinasi yang lebih. Begitu pula dalam sebuah sistem aplikasi. Proses paralel yang tidak saling berinteraksi hanya akan menyebabkan masalah concurrency yang sederhana. Berbeda dengan proses yang saling berinteraksi bahkan berbagi sumber daya. Masalahnya tentu lebih kompleks.
Penting untuk memperhatikan beberapa aspek saat berurusan dengan concurrency pada semua sistem. Aspek terpenting adalah mampu mendeteksi dan merespon peristiwa eksternal yang terjadi dalam urutan acak. Selain itu juga pastikan bahwa peristiwa tersebut dapat ditanggapi dalam interval waktu minimum yang diwajibkan.
Faktor eksternal sering jadi pendorong dibutuhkannya concurrency. Dalam kehidupan sehari-hari, banyak hal yang terjadi secara bersamaan dan harus ditangani secara real-time oleh sistem. Oleh karena itu sistem harus "reactive" alias dituntut untuk menanggapi proses yang dihasilkan secara eksternal. Proses tersebut dapat terjadi pada waktu dan urutan yang tak bisa ditentukan. Membangun sistem konvensional untuk mengatasi tugas tersebut, tentunya sangat rumit.
Di dunia komputer, concurrency umumnya terkait dengan banyaknya core atau inti dari prosesor (CPU). Pada dasarnya, sebuah komputer memiliki mekanisme sequential atau berurutan untuk menjalankan tugas. Prosesor akan menjalankan satu perintah pada satu waktu. Dengan concurrency, kita bisa memanfaatkan kinerja prosesor dengan lebih optimal. Concurrency memungkinkan sebuah sistem untuk bisa dikendalikan dengan mudah. Sebagai contoh, suatu fungsi bisa dijalankan, dihentikan, ataupun dipengaruhi oleh fungsi lain yang jalan secara bersamaan.
[Concurrency vs Parallelism](https://adhesive-eggnog-eca.notion.site/Concurrency-vs-Parallelism-99c52f486e7e46d1b3af6ea71a54271a)
Permasalahan Deadlocks dan Livelocks
Permasalahan Starvation dan Race Conditions