gpt4 book ai didi

go - 为什么 goroutines 不处理同一个文件两次?

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

我正在查看有关 goroutines 和 channel 等模式的 goroutines 博客文章。

bounded.go例如我看到这个:

    paths, errc := walkFiles(done, root)

// Start a fixed number of goroutines to read and digest files.
c := make(chan result) // HLc
var wg sync.WaitGroup
const numDigesters = 20
wg.Add(numDigesters)
for i := 0; i < numDigesters; i++ {
go func() {
digester(done, paths, c) // HLc
wg.Done()
}()
}

既然每个摘要器都在处理相同的 paths 集合,为什么它不重复同一个文件两次?

最佳答案

walkFiles,它没有在您的问题中重现,但它是理解它的关键,具有以下签名:

func walkFiles(done <-chan struct{}, root string) (<-chan string, <-chan error)

所以在您引用的代码中,paths 不是“集合”(即 slice ),而是一个 channel 。当每个工作人员从 channel 中读取时,它会将下一条路径拉出 channel 。下一个从 channel 接收的 worker 不会得到相同的路径,它会在那之后得到下一个。

digester 的所有三个参数都是 channel :

func digester(done <-chan struct{}, paths <-chan string, c chan<- result) 
  • done 用于向工作人员指示他们应该停止,即使仍有工作在排队。
  • paths 是工作人员从中接收路径的工作队列。
  • c 是工作人员发送结果的 channel 。

关于go - 为什么 goroutines 不处理同一个文件两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178460/

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