登录
首页 >  Golang >  Go问答

Go 应用为何会出现内存消耗问题

来源:stackoverflow

时间:2024-03-23 11:18:31 236浏览 收藏

Go应用程序可能出现内存消耗问题的原因之一是创建了过多的并发goroutine。goroutine是轻量级线程,但它们仍需要一些内存开销。如果在没有适当同步的情况下启动了大量goroutine,则应用程序可能会使用大量的内存,即使这些goroutine中没有一个完成。

问题内容

这是非常简单的应用程序:

package main
import "fmt"
func main() {

    for i:= 0; i < 100000; i++ {
        go func (){
            fmt.Println("hello message.")
        }()
    }

    fmt.Scanln()
    fmt.Println("done")
}

在 windows 上运行应用程序后,查看 windows 任务管理器,我看到了这种状态:

有人能说说为什么吗?


解决方案


启动的 goroutine 并发运行,彼此独立。处理它们是 goroutine 调度程序的责任和义务。

goroutine 是一种轻量级线程:它的成本比操作系统线程低很多,但仍然需要一些费用。新 goroutine 的初始堆栈为几 kb(大约 8kb),并根据需要增长/缩小。请参阅 Goroutines 8kb and windows OS thread 1 mb

假设您在没有任何同步的情况下启动了 100,000 个 goroutine,那么在它们中的任何一个完成之前,您很可能会运行 100,000 个 goroutine。估计的内存需求是:

100,000 * 8KB = 800 MB

所以您的应用使用 884mb 与估计基本一致。

本篇关于《Go 应用为何会出现内存消耗问题》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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