Go语言实战(第一章)-并发

版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/89213645

并发 goroutine

goroutine 是可以与其他 goroutine 并行执行的函数,同时也会与主程序(程序的入口)并行
执行。 goroutine 很像线程,goroutine 使用的内存比线程更少, Go 语言运行时会自动在配置的一组逻辑处理器上调度执行 goroutine。

这让编程模型更倾向于在 goroutine之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权。

在 Go 语言中, net/http 库直接使用了内置的 goroutine。每个接收到的请求都自动在其自己的 goroutine 里处理。
每个逻辑处理器绑定到一个操作系统线程上)。这让用户的应用程序执行效率更高,而开发工作量显著减少。
在这里插入图片描述

func log(msg string) {
...这里是一些记录日志的代码
}
// 代码里有些地方检测到了错误
go log("发生了可怕的事情")

通道( channel) 是一种内置的数据结构,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。通道是一种数据结构,可以让 goroutine 之间进行安全的数据通信。
通道这一模式保证同一时刻只会有一个 goroutine 修改数据。通道用于在几个运行的 goroutine 之间发送数据
在这里插入图片描述
图中有 3 个 goroutine,还有 2 个不带缓存的通道。第一个 goroutine 通过通道把数
据传给已经在等待的第二个 goroutine。在两个 goroutine 间传输数据是同步的,一旦传输完
成,两个 goroutine 都会知道数据已经完成传输。当第二个 goroutine 利用这个数据完成其任
务后,将这个数据传给第三个正在等待的 goroutine。这次传输依旧是同步的,两个 goroutine
都会确认数据传输完成。这种在 goroutine 之间安全传输数据的方法不需要任何锁或者同步
机制

猜你喜欢

转载自blog.csdn.net/qq_36762677/article/details/89213645