登录
首页 >  Golang >  Go问答

Go goroutine 是协程吗?

来源:Golang技术栈

时间:2023-04-21 19:32:12 476浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Go goroutine 是协程吗?》,介绍一下golang,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

在 Google I/O 2012 演示 Go Concurrency Patterns 中,Rob Pike 提到多个 goroutine 可以存在于一个线程中。这是否意味着它们被实现为协程?如果没有,它们是如何实施的?欢迎提供源代码链接。

正确答案

不完全的。Go 常见问题解答部分 为什么使用 goroutines 而不是线程? 解释:

Goroutines 是使并发易于使用的一部分。这个想法已经存在了一段时间,它是将独立执行的函数(例程)多路复用到一组线程中。当协程阻塞时,例如通过调用阻塞系统调用,运行时会自动将同一操作系统线程上的其他协程移动到不同的可运行线程,这样它们就不会被阻塞。程序员看不到这些,这就是重点。结果,我们称之为 goroutine,可能非常便宜:除了堆栈内存之外,它们几乎没有开销,只有几千字节。

为了使堆栈变小,Go 的运行时使用可调整大小的有界堆栈。一个新创建的 goroutine 有几千字节,这几乎总是足够的。如果不是,则运行时会自动增长(和缩小)用于存储堆栈的内存,从而允许许多 goroutines 存在于适度的内存中。CPU 开销平均每个函数调用大约三个廉价指令。在同一个地址空间中创建数十万个 goroutine 是很实用的。如果 goroutines 只是线程,系统资源会以更少的数量耗尽。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go goroutine 是协程吗?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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