Go学习笔记—协程

Go学习笔记—协程、通道


1、协程

Go协程在执行上是轻量级的线程。

首先定义一个函数f(s),使用一般形式进行函数调用。

func f(from string) {
    
    
	for i := 0;i < 3;i++{
    
    
		fmt.Println(from,":",i)
	}
}

func main(){
    
    
	f("index")
}

//index : 0
//index : 1
//index : 2

Go语言中的关键字go用来开启goroutine。同一个程序中的所有goroutine共享同一个地址空间。

func f(from string) {
    
    
   for i := 0;i < 3;i++{
    
    
      fmt.Println(from,":",i)
   }
}

func main(){
    
    
   f("index")

   go f("value")

   go func(msg string){
    
    
      fmt.Println(msg)
   }("going")

   var input string
   fmt.Scanln(&input)  // 程序运行结束后,输入任意值结束程序运行
   fmt.Println("done")
}

Go的goroutine在主函数运行结束前有效。

Go协程是在独立的,异步的运行。

func say(s string){
    
    
	for i:=0;i<5;i++{
    
    
		time.Sleep(100*time.Millisecond)
		fmt.Println(s)
	}
}

func main(){
    
    
	go say("hello goroutine")
	say("hello go")
}

//hello goroutine
//hello go 
//hello go 
//hello goroutine
//hello goroutine
//hello go 
//hello go 
//hello goroutine
//hello go

根据输出结果,可以看出,主函数在协程运行完成结束之前结束了,所以协程中的数据并没有完全输出。而且输出的结果是无序的,说明协程的运行是异步的。

猜你喜欢

转载自blog.csdn.net/weixin_46435420/article/details/119572916