Go Lang Goroutine - Eksekusi Dua Thread Sekaligus | Butuh Script

BUTUH SCRIPT

Go Lang Goroutine - Eksekusi Dua Thread Sekaligus

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