Go (juga dikenal sebagai Golang) adalah bahasa pemrograman yang dirancang dengan concurrency dalam pikiran, dan salah satu fitur paling kuatnya untuk pemrograman konkuren adalah goroutines.
Concurrency sendiri merupakan aspek penting dalam pengembangan perangkat lunak modern, yang memungkinkan program untuk menjalankan beberapa tugas secara bersamaan dan memanfaatkan sumber daya sistem dengan efisien.
Dalam artikel ini, kita akan menjelajahi apa itu goroutines, bagaimana mereka bekerja, dan mengapa mereka bermanfaat untuk pemrograman konkuren di Golang.
Apa itu Goroutines?
Goroutines adalah fungsi atau metode yang dapat dieksekusi secara konkuren dengan goroutines lainnya. Mereka ringan, dikelola oleh Go runtime, dan memberikan cara yang sederhana namun kuat untuk mencapai concurrency dalam program-program Go.
Goroutines mirip dengan thread dalam bahasa pemrograman lain, tetapi mereka lebih ringan dan dapat dibuat dan dikelola dengan lebih efisien.
Membuat Goroutines Golang
Di Go, membuat goroutine adalah sangat mudah dengan menambahkan kata kunci “go” sebelum pemanggilan fungsi atau metode. Ketika pemanggilan fungsi diberi awalan “go”, ia mulai dieksekusi dalam sebuah goroutine baru, secara konkuren dengan goroutine pemanggil.
Goroutine pemanggil melanjutkan eksekusinya tanpa menunggu goroutine yang baru dibuat selesai. Berikut adalah contohnya:
package main import "fmt" func sayHello() { fmt.Println("Halo, goroutine!") } func main() { go sayHello() // Mulai eksekusi sayHello dalam goroutine baru fmt.Println("Halo dari fungsi utama!") // Tunggu tombol ditekan sebelum keluar agar goroutine dapat menyelesaikan eksekusi var input string fmt.Scanln(&input) }
Pada contoh di atas, fungsi sayHello
dieksekusi secara konkuren sebagai goroutine sementara goroutine utama melanjutkan mencetak “Halo dari fungsi utama!”. Tanpa baris fmt.Scanln(&input)
, goroutine utama akan keluar segera, dan goroutine yang menjalankan sayHello
tidak akan memiliki kesempatan untuk menyelesaikan eksekusi.
Baca Juga
Manfaat Goroutines
Goroutines menawarkan beberapa keuntungan untuk pemrograman konkuren di Golang:
1. Ringan:
Goroutines sangat ringan dibandingkan dengan thread sistem operasi. Mereka memiliki ukuran tumpukan awal yang kecil, yang dapat tumbuh dan menyusut secara dinamis sesuai kebutuhan. Sifat ringan ini memungkinkan program Go untuk membuat dan mengelola ribuan atau bahkan jutaan goroutine dengan efisien.
2. Konkurensi tanpa callback yang rumit:
Goroutines memudahkan penulisan kode konkuren yang bersih dan mudah dibaca. Daripada bergantung pada callback atau mekanisme sinkronisasi yang rumit, goroutines dapat berkomunikasi dan disinkronkan menggunakan channel (fitur bawaan Go untuk komunikasi antar goroutines).
3. Skalabilitas:
Goroutines dirancang untuk skalabilitas. Karena mereka ringan, memungkinkan untuk membuat sejumlah besar goroutine untuk menangani tugas konkuren tanpa membebani sumber daya sistem.
4. Pemanfaatan sumber daya yang efisien:
Goroutines dipadukan menjadi sejumlah kecil thread OS oleh Go runtime. Ini memungkinkan penjadwal Go untuk memanfaatkan sumber daya CPU dengan efisien dengan secara otomatis menjadwalkan goroutines di thread yang tersedia.
5. Penanganan kesalahan yang disederhanakan:
Goroutines dalam Golang memiliki tumpukan sendiri, yang berarti ketika sebuah goroutine mengalami panic (kesalahan runtime), itu tidak memengaruhi goroutines lain atau program utama. Pemisahan goroutines ini menyederhanakan penanganan dan pemulihan kesalahan dalam program konkuren.
Kesimpulan
Goroutines adalah fitur kuat dari bahasa pemrograman Golang yang memungkinkan konkurensi yang ringan dan pemanfaatan sumber daya yang efisien. Mereka memberikan cara yang sederhana dan bersih untuk menulis kode konkuren tanpa kompleksitas model threading tradisional. Dengan goroutines dan channel, para pengembang Go dapat membangun aplikasi yang sangat konkuren dan skalabel sambil tetap menjaga kebersihan dan kesederhanaan kode.
Dengan memanfaatkan goroutines secara efektif, pengembang dapat memanfaatkan potensi penuh pemrograman konkuren di Golang dan membangun sistem perangkat lunak yang tangguh, responsif, dan skalabel. Jadi, jika Anda sedang memulai proyek baru atau mempertimbangkan konkurensi dalam kode Go yang sudah ada, manfaatkan goroutines dan nikmati keuntungannya.