gpt4 book ai didi

concurrency - 我们应该做嵌套的 goroutines 吗?

转载 作者:IT老高 更新时间:2023-10-28 13:10:46 25 4
gpt4 key购买 nike

我正在尝试为大量文件构建解析器,但我找不到可能称为“嵌套 goroutines”的信息(也许这不是正确的名称?)。

给定很多文件,每个文件都有很多行。我应该这样做:

for file in folder:
go do1

def do1:
for line in file:
go do2

def do2:
do_something

或者我应该只使用“一个级别”的 goroutine,并执行以下操作:

for file in folder:
for line in file:
go do_something

我的问题主要针对性能问题。

感谢您说出那句话!

最佳答案

如果您使用您指定的架构,您很有可能会用完 CPU/Mem/etc,因为您将创建任意数量的 worker 。我建议,改为使用允许您通过 channel 进行节流的架构。例如:

在您的主进程中,将文件馈送到 channel 中:

for _, file := range folder {
fileChan <- file
}

然后在另一个 goroutine 中将文件分成几行并将它们输入到一个 channel 中:

for {
select{
case file := <-fileChan
for _, line := range file {
lineChan <- line
}
}
}

然后在第三个 goroutine 中弹出这些行并按照您的意愿处理它们:

for {
select{
case line := <-lineChan:
// process the line
}
}

这样做的主要优点是,您可以创建尽可能多或尽可能少的 goroutine,只要您的系统可以处理并将它们传递给所有相同的 channel ,无论哪个 goroutine 先到达 channel ,都会处理它,所以您能够限制您正在使用的资源量。

这是一个工作示例:http://play.golang.org/p/-Qjd0sTtyP

关于concurrency - 我们应该做嵌套的 goroutines 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789287/

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