Membuat goroutine pada golang

Golang – Pengenalan dan cara membuat goroutine

Untuk membuat goroutine di golang sangatlah sederhana sekali, dan ini sudah built in pada bahasa pemrogaman nya jadi kita tidak perlu menambah package atau menginstall mdule apapun. Yang perlu kita lakukan adlah menambahkan perintah go sebelum memanggil sebuah function yang akan kita jalankan di sebuah goroutine.

Saat sebuah function kita jalankan dalam goroutine, function tersebut akan berjalan secara asynchronous, artinya tidak akan ditunggu sampai function tersebut selesai. Aplikasi akan berjalan ke kode program selanjutnya tanpa menunggu goroutine yang kita buat selesai, jadi hati-hati saat kita me running go routine tetapi aplikasi nya keburu selesai maka goroutine tersebut tidak akan ditunggu dan akan di kill oleh golang, jadi pastikan kita menunggu go routine selesai.

Membuat goroutine

Pertama buatlah project dengan go module dan beri nama project nya belajar-golang-goroutines, kemudian buat file baru dengan nama goroutine_test.go. Pada artikel kali ini kita akan menajlankan goroutine nya menggunakan package test. Nah setelah selesai membuat file baru isikan baris kode berikut di dalam file nya

package belajar_golang_goroutines

import (
	"fmt"
	"testing"
	"time"
)

func RunHelloWorld() {
	fmt.Println("Hello World")
}

func TestRunHelloWorld(t *testing.T) {
	go RunHelloWorld()
	fmt.Println("Ups")

	time.Sleep(1 * time.Second)
}
Membuat goroutine pada golang
Membuat goroutine pada golang

Perhatikan baris kode diatas, dimana kita membuat sebuah function RunHelloWorld yang akan melakukan print kata Hello World pada terminal. Kemudian pada baris ke 13 kita juga membuat sebuah unit test dengan nama TestRunHelloWorld, di dalam unit test ini lah kita akan me running goroutine nya.

Pada baris ke 14 kita me manggil function RunHelloWorld tetapi berbeda dengan sebelum sebelumnya saat ini kita memanggil function dengan tambahan kata kunci go di depan function nya, yang artinya function ini akan di jalankan secara asynchronous. Kemudian pada baris 15 kita melakukan print kata Ups ke terminal untuk memastikan jika Ups akan di jalankan tanpa menunggu function RunHelloWorld selesai. Dan terakhir pada baris ke 17 kita akan membuat aplikasi kita menunggu selama 1 detik untuk memastikan goroutine selesai.

Coba jalankan unit test di atas dan perhatikan output nya

Output goroutine
Output goroutine

Perhatikan output diatas, bisa dilihat jika saat ini Ups keluar terlebih dahulu sebelum Hello World, hal ini terjadi karena saat kita membuat goroutine pada function HelloWorld maka eksekusi function tersebut tidak akan ditunggu sampai selesai dan program akan langsung di jalankan ke baris kode selanjutnya.

Tetapi hati-hati saat menggunakan goroutine, karena jika function yang dijalankan goroutine mengembalikan nilai maka nilai tersebut tidak akan bisa kita ambil.

Goroutine sangat ringan

Goroutine sangat ringan karena untuk 1 goroutine ukuran nya hanya sekitar 2kb saja, karena dia sangat ringan sekali maka kita bisa membuat banyak sekali go routine, kita bisa membuat sebanyak ribuan atau bahkan jutaan tanpa harus takut boros memory. Tidak seperti thread yang ukurannya cukup besar sekitar 1mb, yang mana jika kita membuat ribuan thread maka pasti akan lemot.

Untuk membuktikan goroutine itu ringan maka kita akan mencoba membuat kode program atau function yang akan me running atau membuat 100.000 go routine, kita akan melihat apa yang akan terjadi apakah nanti akan terjadi OOM(Out Of Memory) atau baik-baik saja.

Masih pada file goroutines_test.go buat function baru seperti berikut

func DisplayNumber(number int) {
	fmt.Println("Display :", number)
}

func TestManyGoroutine(t *testing.T) {
	for i := 0; i < 100000; i++ {
		go DisplayNumber(i)
	}

	time.Sleep(10 * time.Second)
}
Membuat banyak goroutine
Membuat banyak goroutine

Pada kode diatas kita membuat function dengan nama DisplayNumber yang akan melakukan print ke terminal dan menampilkan nomor atau angka dari parameter yang dibawa nya. Kemudian kita juga membuat unit test TestManyGoroutine yang di dalamnya terdapat perulangan yang memanggil DisplayNumber sebanyak 100.000 kali artinya kita akan membuat goroutine sebanyak 100.000

Coba jalankan test nya dan perhatikan outputnya

Output dari pembuatan banyak goroutine
Output dari pembuatan banyak goroutine

Nah bisa dilihat jika unit test selesai di jalankan dan dilakukan looping sebanyak 100.000 kali tanpa ada msalah apapun, tetapi kenapa outputnya tidak berurutan, karena saat running menggunakan goroutine artinya running secara asynchronous walaupun dia running concurent yang seharusnya berurutan tetapi karena device yang saya gunakan multicore jadi dia tidak hanya running secara concurent tetapi juga secara pararel, oleh karena itu output nya bisa berubah-rubah tidak terstruktur atau tidak berurutan.

Penutup

Pada artikel kali ini kita telah belajar tentang cara membuat goroutine pada bahasa pemrogaman go. Dan pada artikel selanjutnya saya akan membahas apa itu channel dan cara membuat channel pada bahasa pemrogaman go.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

About Me

About Me

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam.

Social Profiles

Facebook