gpt4 book ai didi

go - 创建 slice 字节 goroutine 挂起

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:33 25 4
gpt4 key购买 nike

我有一个正在处理的上传程序,但遇到了问题。我有 n 个例程来处理将零件上传到大文件。本质上,它会将文件拆分为 100MB 的 block ,并根据您在配置中指定的并发进程数量同时上传它们。

我遇到的问题是当我创建一个缓冲区来读取文件并上传 make([]byte, 100000000) 时挂起...但前提是它在 go 例程中。 (我使用 100000000 来简化上传计算)

这是一个例子。

这有效:https://play.golang.org/p/tkn8JVir9S

package main

import (
"fmt"
)

func main() {
buffer := make([]byte, 100000000)
fmt.Println(len(buffer))
}

这不是:https://play.golang.org/p/H8626OLpqQ

package

main

import (
"fmt"
)

func main() {
go createBuffer()
for {
}

}

func createBuffer() {
buffer := make([]byte, 100000000)
fmt.Println(len(buffer))
}

它只是挂起...我不确定 go 例程是否存在内存限制?我试图研究并看看我能找到什么,但一无所获。如有任何想法,我们将不胜感激。

编辑:感谢大家的反馈。我会说我没有很好地解释真正的问题,下次会尝试提供更多的整体观点。我最终使用了一个 channel 来阻止让我的 goroutines 准备好处理新文件。这是用于上传到第三方的 DR 备份,所有这些都需要将大文件拆分为 100mb 的 block 。我想我应该更清楚我的程序的性质。

最佳答案

此程序挂起,因为您的代码中存在无限循环。尝试像这样运行代码以向自己证明这一点。 goroutine 不是导致挂起的原因。

func main() {
for {
}
}

如果您只想查看fmt.Println(..) 打印,那么我建议使用time.Sleep。打电话或类似的。

如果您想等待一堆 goroutines 完成,那么我推荐 this excellent answer到那个确切的问题。

关于go - 创建 slice 字节 goroutine 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com