Goroutine: simple implementation

You might have heard about GoLang a lot in the recent years as it’s one of the latest & popular programming languages. There are a thousand reasons for learning GoLang. You can check one of my article on why I prefer GoLang over others here. One of them is Goroutine. It is a lightweight thread managed by Go Runtime, requires less heap memory that enables thousands of concurrent execution in modern multicore processor systems.

Implementation of goroutine is much easier in comperison to threads in other programming languages. go keyword followed by function name and parameters will start a new goroutine, i.e.

go function_name(parameters) //starts a new goroutine

It will execute the function concurrently using goroutine in Go Runtime.

GoLang Program to run a funtion concurrently with main function

package main
//importing required packages
import (
	"fmt"
	"time"
)
//function to execute in parallel
func funtion_to_execute(parameter string){
	for i := 10; i>0; i-- {
		time.Sleep(1 * time.Millisecond)
		fmt.Println(parameter)
	}
}
func main() {
  //execute in new thread
	go funtion_to_execute("in funtion_to_execute function")
  //execute rest of the statements in main function
	for i := 10; i>0; i-- {
		time.Sleep(1 * time.Millisecond)
		fmt.Println("in main funtion")
	}
}

output

in main funtion
in funtion_to_execute function
in main funtion
in funtion_to_execute function
in funtion_to_execute function
in main funtion
in main funtion
in funtion_to_execute function
in main funtion
in funtion_to_execute function
in main funtion
in funtion_to_execute function
in main funtion
in funtion_to_execute function
in main funtion
in funtion_to_execute function
in funtion_to_execute function
in main funtion
in main funtion

GoLang Program to run multiple funtions concurrently

package main
//importing required packages
import (
	"fmt"
	"time"
)

//function to execute in parallel
func funtion_to_execute(parameter string){
	for i := 5; i>0; i-- {
		time.Sleep(1 * time.Millisecond)
		fmt.Println(parameter)
	}
}

func main() {
	//execute in new thread
  	go funtion_to_execute("1st thread")
	//execute in new thread
	go funtion_to_execute("2nd thread")
	//execute in new thread
	go funtion_to_execute("3rd thread")
	
    //waiting for completion of 
	time.Sleep(100 * time.Millisecond)
	
}

output

2nd thread
1st thread
3rd thread
1st thread
2nd thread
3rd thread
2nd thread
3rd thread
1st thread
3rd thread
1st thread
2nd thread
1st thread
3rd thread
2nd thread

NOTE: GoRoutine runs on the same address space, so using shared memory might be hazardous without synchronization. The sync package provides useful primitives.

You may also like...

Leave a Reply

Your email address will not be published.