当前位置: 首页 > 面试题库 >

主要功能是goroutine吗?

亢胤运
2023-03-14
问题内容

main()函数是goroutine吗?例如,我看到了如下的崩溃堆栈跟踪,这让我问:

goroutine 1 [running]: main.binarySearch(0x0, 0x61, 0x43,
0xc420043e70, 0x19, 0x19, 0x10)
     /home/---/go/src/github.com/----/sumnum.go:22 +0x80 main.main()
     /home/---/go/src/github.com/---/sumnum.go:13 +0xc1 exit status 2

问题答案:

是的,主要功能在goroutine(主要程序)中运行。

根据https://tour.golang.org/concurrency/1

goroutine是Go运行时管理的轻量级线程go f(x, y, z) 开始 运行 新的goroutinef(x, y, z)。对f,x,y和z的求值发生在 当前goroutine中 ,而执行则f发生在 新的goroutine中
Goroutine在相同的地址空间中运行,因此必须同步访问共享内存。同步包提供了有用的原语,尽管您在Go中不需要太多,因为还有其他原语。

因此,根据此官方文档,main可以在 当前goroutine中 运行。

现在让我们玩些乐趣main并运行它(因此, 当前的goroutine 运行 新的goroutine ),因此,在这里,我们有
多个goroutine 可以main()再次执行!(注意:对共享内存的访问必须同步):

package main

import (
    "fmt"
    "time"
)

var i = 3

func main() {
    if i <= 0 {
        return
    }
    i--
    fmt.Println("Hi")
    go main()
    time.Sleep(100 * time.Millisecond)
}

输出:

Hi
Hi
Hi

让我们使用main()一个goroutine- 无需同步)来计算阶乘:

package main

import "fmt"

func main() {
    if f <= 0 {
        fmt.Println(acc)
        return
    }
    acc *= f
    f--
    main()
}

var f = 5
var acc = 1

输出:

120

注意:上面的代码仅用于清楚地表达我的观点,不适用于生产(使用全局变量不应该是首选)。



 类似资料:
  • 本章节帮助用户快速了解 云联壹云 平台的主要功能. 监控 介绍监控告警的内容 多云管理 介绍标签管理、虚拟机的创建和连接的内容。 费用管理 介绍费用分析、预算、费用优化以及RI分析的内容。 认证与安全 介绍安全检查、安全告警、操作日志的内容。

  • 很小的额外开销 NSIS 具有体积小、速度快和高效率的特点。当其它安装程序动辄需要几百 KB 或好几 MB 的安装程序数据,而一个具有完整功能的 NSIS 安装程序仅占用了 34 KB 的额外开销。 兼容所有主流的 Windows 操作系统 你可以创建兼容于 Windows 95、Windows 98、Windows ME、Windows NT、Windows 2000、Windows XP 和

  • 问题内容: 我正在学习和编程。根据Jonathan Corbet的书,我们没有设备驱动程序中的功能。 在这里我有两个问题: 为什么我们不需要设备驱动程序中的功能? 内核有功能吗? 问题答案: 从根本上讲,例程的命名没有什么特别的。如上所述,它充当可执行加载模块的入口点。但是,您可以为装入模块定义不同的入口点。实际上,您可以定义多个入口点,例如,引用您喜欢的dll。 从操作系统(OS)的角度来看,它

  • ./https://www.wenjiangs.com/doc/KzGHBeTfjGfaq/assets/function.csv 功能分类 功能名称 Web防护 网站漏洞防护(基于特征、部分基于行为) 网站后台防护 抗CC攻击 敏感词过滤 网站防盗链 防多线程下载 自定义CDN 恶意域名解析防护 网站性能监控 已知Webshell自动隔离(基于行为) 未知Webshell实时防护(基于行为) 未

  • DaoCloud 企业版 支持私有环境的部署 提供私有的代码仓库 提供私有的构建引擎 提供私有的镜像仓库 提供私有的集群管理 支持专属的访问入口 支持自定的域名绑定 支持无限个数流水线 提供数据的备份恢复 提供企业级客户支持 企业版采用混合云方式交付,功能矩阵如下图: DaoCloud 私有版 应用与数据的云平台 弹性的容器应用管理 全语言与技术栈支持 高性能横向负载均衡 微服务分布式高可用 企业

  • 问题内容: 在Google I / O 2012演示文稿 Go Concurrency Patterns中 ,Rob Pike提到了多个 goroutine 可以 驻留 在一个线程中。这是否意味着它们被实现为协程?如果没有,如何实施?欢迎使用源代码链接。 问题答案: 不完全的。Go常见问题解答部分 为什么使用goroutines而不是线程? 解释: Goroutine是使并发易于使用的一部分。这个