并发与并行
并发:同一时间段内执行多个任务(你早上在编程狮学习Java和Python)
并行:同一时刻执行多个任务(你和你的网友早上都在使用编程狮学习Go)
Go语言中的并发程序主要是通过基于CSP(communicating sequential processes)的goroutine和channel来实现,当然也支持使用传统的多线程共享内存的并发方式
goroutine 就是在 函数前面加 go 就可以了
其实在Go程序中,会默认为main函数创建一个goroutine,而在上述代码中我们使用go关键字创建了一个新的goroutine去调用hello函数。而此时main的goroutine还在往下执行中,我们的程序中存在两个并发执行的goroutine。当main函数结束时,整个程序也结束了,所有由main函数创建的子goroutine也会跟着退出,也就是说我们的main函数执行过快退出导致另一个goroutine内容还未执行就退出了,导致未能打印出hello
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("hello")
}
func main() {
go hello()
fmt.Println("欢迎来到编程狮")
// 解决办法
// time.Sleep(time.Second)
}
Go语言中的sync包为我们提供了一些常用的并发原语
当你并不关心并发操作的结果或者有其它方式收集并发操作的结果时,WaitGroup是实现等待一组并发操作完成的好方法文章来源:https://www.toymoban.com/news/detail-453913.html
执行多次上述代码你会发现输出顺序并不一致,这是因为10个goroutine都是并发执行的,而goroutine的调度是随机的文章来源地址https://www.toymoban.com/news/detail-453913.html
到了这里,关于Go 中的并发和并行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!