登录
首页 >  Golang >  Go问答

在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?

来源:Golang技术栈

时间:2023-04-29 12:58:31 344浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?》就很适合你!本篇内容主要包括在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

package main

func main() {
        c:=make(chan int)
        for i:=0; i

上面的代码创建了 100 个 goroutine 来将 num 插入到通道 c,所以我只是想知道,这些 goroutine 会以随机顺序执行吗?在我的测试期间,输出将始终为 1 到 100

正确答案

您观察到的“随机”行为是更严格的非确定性行为。

要了解这里发生了什么,请考虑通道的行为。在这种情况下,它有许多 goroutine 试图写入通道,而只有一个 goroutine 从通道中读取。

阅读过程只是顺序的,我们可以忽略它。

有许多并发的写入进程,它们正在竞争访问共享资源(通道)。通道必须选择它接受的消息。

当通信顺序过程 (CSP) 网络做出 ** 选择** 时,它会引入 ** 非确定性** 。在 Go 中,这种选择有两种方式发生:

  • 并发访问通道的一端,以及
  • select陈述。

你的情况是第一个。

CSP 是一种允许分析和理解并发行为的代数。关于这方面的开创性出版物是 Roscoe 和 Hoare “ 奥卡姆编程法则https://www.cs.ox.ac.uk/files/3376/PRG53.pdf(类似的想法也适用于 Go,尽管存在细微差别)。

令人惊讶的是,goroutine 的并发执行是 完全确定 的。只有 在做出选择时 ,非确定性才会出现。

理论要掌握,实操不能落!以上关于《在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表