如何将数组处理分离到 goroutine 中?

Ser*_*rov 6 go goroutine

我有一片 30'000 根弦。如何将这个切片分成 10 个 goroutine 进行处理,这些协程将从切片中获取 3000 个字符串,从中提取一些数据并推送到一个新切片中?

所以,最后,我将有 10 个切片,每个切片有 3000 个处理结果。处理这个问题的模式是什么?

我已经看过这篇文章,但不确定这些模式中的哪一种适用于我的情况。

Eze*_*eno 3

使用通道,从切片中读取元素,使用扇出来分配负载并传递消息。然后,在 Goroutine 中处理字符串并在单个 Goroutine 中收集结果(扇入)以避免互斥。

您可能想要设置最大并发 Goroutines 的数量。

请记住,写入切片时它们不是线程安全的。

有用的信息:

https://blog.golang.org/pipelines https://talks.golang.org/2012/concurrency.slide#1 https://blog.golang.org/advanced-go-concurrency-patterns https://talks .golang.org/2013/advconc.slide#1

  • 是的,使用扇入来收集结果,这样只有一个 goroutine 正在写入目标切片。避免了对互斥锁的需要。 (2认同)