本文主要是介绍二十四、goroutine,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、并发与并行
二、阻塞与非阻塞
1、模拟一个阻塞方法
2、使用goroutine进行并发处理
三、关于goroutine的性能
一、并发与并行
理解:举个通俗的例子来理解两者之间的区别,在自己家同时制作多个蛋糕叫并发,与朋友家一起制作,制作完成后汇集在一起叫做并行。
二、阻塞与非阻塞
1、模拟一个阻塞方法
import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)
}
func main() {timeSleep()fmt.Println("wait timeSleepFunc")
}
在上述代码中使用time包中的sleep方法,让程序暂时停止5秒,再执行下面的print方法
2、使用goroutine进行并发处理
import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)fmt.Println("time sleep finished")
}
func main() {go timeSleep()fmt.Println("end end end")
}
这里的goroutine正好写为go
可以发现不需要再等待5秒再执行下面的方法了,同时我们也看不到方法timeSleep的返回结果了。因为goroutine直接执行后面的代码后理解返回,没有其他程序阻止的话就执行完毕后结束,所以如果我们想看到timeSleep方法执行结果可以再添加一个sleep方法阻止退出
import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)fmt.Println("time sleep finished")
}
func main() {go timeSleep()fmt.Println("end end end")time.Sleep(time.Second * 6)
}
这里我们就可以看到timeSleep方法的返回结果
三、关于goroutine的性能
与java一样,go在幕后使用线程来并发管理,但是不需要直接管理线程,创建一个goroutine只需要占用几kb的内存,另外销毁的效率也非常的高。
这篇关于二十四、goroutine的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!