Dart Isolates adalah mekanisme concurrency (menjalankan kode secara paralel) di Dart yang tidak menggunakan threads berbagi memori, tetapi menggunakan isolasi penuh.
Bayangkan setiap isolate seperti proses mini di dalam aplikasi yang memiliki:
- Memori sendiri
- Event loop sendiri
- Garbage collector sendiri
- Eksekusi terpisah dari isolate lain
Karena tidak berbagi memori, isolate berkomunikasi menggunakan message passing (mengirim data lewat port), mirip seperti microservice kecil di dalam aplikasi.
Isolates pada umumnya pada aplikasi Flutter, digunakan untuk menangani proses komputasi yang besar yang memungkinkan aplikasi UI tidak terjadi responsive.
Tidak ada aturan apa pun tentang kapan Anda harus menggunakan isolat, namun berikut beberapa situasi yang mungkin berguna:
- Mengurai dan mendekode JSON yang sangat besar.
- Memproses dan mengompresi foto, audio dan video.
- Mengonversi file audio dan video.
- Melakukan pencarian dan pemfilteran yang rumit pada daftar besar atau dalam sistem file.
- Melakukan I/O, seperti berkomunikasi dengan database.
- Menangani permintaan jaringan dalam jumlah besar.
- Komputasi berat (AI, image processing)
- Enkripsi / dekripsi
Contoh sederhana membuat isolate
import 'dart:isolate';
void heavyTask(SendPort sendPort) {
int sum = 0;
for (var i = 0; i < 100000000; i++) {
sum += i;
}
sendPort.send(sum);
}
void main() async {
final receivePort = ReceivePort();
await Isolate.spawn(heavyTask, receivePort.sendPort);
final result = await receivePort.first;
print("Hasil komputasi: $result");
}
$ dart run Isolates.dart
Hasil komputasi: 4999999950000000
Sample source code bisa di download di github pada link berikutĀ dart-tutorial