Immutability dan Thread Safe
Pendahuluan
Di artikel yang lama, kita bisa melihat mengenai Thread Concurrency vs Paralellisme
Di artikel tersebut dijelaskan mengenai cara komputer dalam menangani objects dan juga proses.
Dan kalau dikaitkan dengan pemrograman komputer, ada 2 topik yang terkait dengannya, yaitu :
- immutability
- thread safety
Immutability mengacu pada sifat suatu objek yang tidak dapat diubah setelah dibuat.
Thread safety mengacu pada kemampuan suatu kode untuk dijalankan secara aman oleh beberapa thread pada saat bersamaan.
Immutability
Immutability memiliki beberapa manfaat, antara lain:
- Keamanan: Objek immutable lebih aman dari kesalahan karena tidak dapat diubah secara tidak sengaja.
- Stabilitas: Objek immutable lebih stabil karena perubahan pada satu objek tidak akan memengaruhi objek lain.
- Efisiensi: Objek immutable lebih efisien karena tidak perlu melakukan operasi copy atau assignment.
Thread Safety
Thread safety memiliki beberapa manfaat, antara lain:
- Keakuratan: Thread safety dapat membantu mencegah kesalahan yang disebabkan oleh akses simultan ke data yang sama.
- Kinerja: Thread safety dapat meningkatkan kinerja dengan mengurangi kebutuhan untuk sinkronisasi.
- Keamanan: Thread safety dapat membantu mencegah serangan keamanan yang memanfaatkan akses simultan ke data yang sama.
Hubungan Antara Immutability dan Thread Safety
Immutability dan thread safety saling terkait.
Objek immutable secara alami thread-safe karena perubahan pada satu objek tidak akan memengaruhi objek lain.
Namun, objek mutable dapat thread-safe jika perubahan pada objek tersebut dijaga secara sinkron.
Cara Mencapai Immutability
Ada beberapa cara untuk menerapkan immutability dalam pemrograman, antara lain:
-
Menggunakan tipe data immutable: Beberapa bahasa pemrograman menyediakan tipe data immutable bawaan, seperti const di JavaScript, val di Kotlin.
-
Menggunakan konsep copy on write. Teknik ini membuat salinan objek saat objek tersebut diubah. Salinan ini kemudian dapat digunakan untuk mengubah objek tanpa memengaruhi objek asli.
-
Membuat objek immutable dengan pattern tertentu seperti Singleton, Builder patter, dll.
Cara Mencapai Thread Safety
Thread safety adalah sifat suatu program yang dapat dijalankan secara paralel oleh beberapa thread tanpa menyebabkan konflik.
Konflik dapat terjadi ketika dua thread mencoba mengakses atau mengubah data yang sama secara bersamaan.
Ada beberapa cara untuk memastikan thread safety, antara lain:
- Menggunakan data immutable: Data immutable tidak dapat diubah oleh thread apa pun, sehingga tidak perlu dilindungi dari konflik.
- Menggunakan mutex: Mutex adalah struktur data yang memungkinkan satu thread mengakses data pada satu waktu.
- Menggunakan semaphore: Semaphore adalah struktur data yang membatasi jumlah thread yang dapat mengakses data pada satu waktu.