go語言的協程和信道高效率,併發執行代碼

Go 協程是與其他函數或方法一起併發運行的函數或方法。Go 協程可以看作是輕量級線程。與線程相比,創建一個 Go 協程的成本很小。因此在 Go 應用中,常常會看到有數以千計的 Go 協程併發地運行。

信道可以想像成 Go 協程之間通信的管道。如同管道中的水會從一端流到另一端,通過使用信道,數據也可以從一端發送,在另一端接收。

通過信道來實現 Go 協程間的通信。

代碼實現如下:

package main

import (
	"fmt"
)

func uploadfile(args string,done chan string){

	fmt.Println(args)
	//信道返回數據
	done <- "success"
}

func queryStatus(work_id int ,done chan string)  {

	fmt.Println(work_id)
	//信道返回數據
	done <- "待審覈"
}

func main()  {

	a := "開始上傳文件"
	//信道
	done := make(chan string)
	//上傳文件協程
	go uploadfile(a,done)
	//接受信道返回的數據
	data := <- done
	fmt.Println(data)
	//查詢狀態協程
	query_status := make(chan string)
	work_id := 1
	go queryStatus(work_id,query_status)
	status := <- query_status
	fmt.Println(status)
	// 總提交
	fmt.Println("數據提交完畢")

}

go的協程類似於多線程,至於官方說成本小這點優勢,這個還需要去查看底層原理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章