Golang入门到项目实战 golang并发编程之runtime包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang入门到项目实战 golang并发编程之runtime包相关的知识,希望对你有一定的参考价值。

参考技术A runtime包里面定义了一些协程管理相关的api

让出CPU时间片,重新等待安排任务

运行结果

退出当前协程

运行结果

运行结果

如果修改最大核心数为1,运行结果如下,不会出现交替执行现象

Golang入门到项目实战 golang并发变成之通道channel

参考技术A

Go提供了一种称为通道的机制,用于在goroutine之间共享数据。当您作为goroutine执行并发活动时,需要在goroutine之间共享资源或数据,通道充当goroutine之间的管道(管道)并提供一种机制来保证同步交换。

根据数据交换的行为,有两种类型的通道:无缓冲通道和缓冲通道。无缓冲通道用于执行goroutine之间的同步通信,而缓冲通道用于执行异步通信。无缓冲通道保证在发送和接收发生的瞬间两个goroutine之间的交换。缓冲通道没有这样的保证。

通道由make函数创建,该函数指定chan关键字和通道的元素类型。

这是创建无缓冲和缓冲通道的代码块:

语法

使用内置函数make创建无缓冲和缓冲通道。make的第一个参数需要关键字chan,然后是通道允许交换的数据类型。

这是将值发送到通道的代码块需要使用<-运算符:

语法

一个包含5个值的缓冲区的字符串类型的goroutine1通道。然后我们通过通道发送字符串“Australia”。

这是从通道接收值的代码块:

语法

<- 运算符附加到通道变量(goroutine1)的左侧,以接收来自通道的值。

在无缓冲通道中,在接收到任何值之前没有能力保存它。在这种类型的通道中,发送和接收goroutine在任何发送或接收操作完成之前的同一时刻都准备就绪。如果两个goroutine没有在同一时刻准备好,则通道会让执行其各自发送或接收操作的goroutine首先等待。同步是通道上发送和接收之间交互的基础。没有另一个就不可能发生。

在缓冲通道中,有能力在接收到一个或多个值之前保存它们。在这种类型的通道中,不要强制goroutine在同一时刻准备好执行发送和接收。当发送和接收阻塞时也有不同的条件。只有当通道中没有要接收的值时,接收才会阻塞。仅当没有可用缓冲区来放置正在发送的值时,发送才会阻塞。

实例

运行结果

以上是关于Golang入门到项目实战 golang并发编程之runtime包的主要内容,如果未能解决你的问题,请参考以下文章

Golang入门到项目实战 golang for循环语句

Golang入门到项目实战 golang并发变成之通道channel

Golang入门到项目实战 | golang结构体

Golang入门到项目实战 | go语言数据类型

Golang入门到项目实战 | golang嵌套结构体

Golang入门到项目实战 第一个golang应用