Golang adalah salah satu program yang dapat mengeksekusi dua Thread sekaligus. Artinya dalam satu file dapat menjalankan lebih dari satu Thread bersamaan. Berbeda dengan bahasa program pada umumnya yang hanya menjalankan satu Thread dalam satu file secara berurutan dari atas ke bawah.
Goroutine merupakan salah satu metode yang dipakai dalam go. Metode ini dapat dikatakan sebagai native thread yang berisikan sangat banyak goroutine. Goroutine pada go language sangat ringan, hanya dibutuhkan sekitar 2kB memori saja untuk satu goroutine. Tak hanya itu, Eksekusi goroutine pada go juga bersifat asychronous, yang menjadikan program tidak saling tunggu dengan goroutine lain.
Penerapan Goroutine
Dalam GO language, proses yang akan dieksekusi dengan goroutine harus dibungkus kedalam sebuah fungsi dan penambahan sintax go didepannya. Sintax tersebutlah yang menandakan bahwa fungsi tersebut dideteksi sebagai goroutin baru.
Berikut adalah contoh penerapan goroutine sederhana pada Go Lang. Program dibawah ini akan dieksekusi sebanyak 10 baris dimana 5 baris baris dieksekusi dengan cara biasa, dan 5 baris lainya dieksekusi dengan menggunakan goroutine.
package main
import "fmt"
import "runtime"
func print(batas int, pesan string) {
for i := 0; i < batas; i++ {
fmt.Println((i+1), pesan)
}
}
func main() {
runtime.GOMAXPROCS(2)
go print(5, "Halo Namaku Chalid")
print(5, "Apa Kabar")
var input string
fmt.Scanln(&input)
}
Dalam kode tersebut, runtime.GOMAXPROC(n) digunakan untuk menentukan banyak prosesor yang diaktifkan. Prosesor disini artinya adalah thread yang aktif dalam listing program tersebut. Dalam program ini, ada dua prosessor yang dijalankan. Satu untuk menjalankan program seperti biasa dan satunya menjalankan program dalam goroutine.
Pembuatan goroutine baru pada program diatas ditandai dengan sintax go . Contohnya pada sintax berikut go print(5, "Halo Namaku Chalid") . Pada sintax tersebut fungsi print() dieksekusi sebagai goroutine baru.
Fungsi fmt.Scanln() digunakan sebagai blocking, artinya program akan berhenti pada baris tersebut hingga user menekan tombol enter. Hal ini sangat perlu dilakukan karena adanya kemungkinan perbandingan waktu eksekusi antara goroutine print() dengan goroutine utama main() . Jika hal tersebut terjadi, maka goroutine yang belum selesai secara paksa harus dihentikan karena goroutine utama telah selesai dijalankan.
Hasil eksekusinya kurang lebih seperti berikut :
Dapat dilihat, output pada tampilan diatas tidak selalu sama meski dalam satu listing program yang sama. Bisa jadi urut seperti tampilan pertama, bisa jadi selang seling atau tidak beraturan. Hal ini dikarenakan program dieksekusi 2 kali tanpa harus saling menunggu. Goroutinge mana yang dieksekusi terlebih dahulu bergantung dari kedua prosesor tersebut.
Posting Komentar