
php小编柚子在此为大家介绍一种在sync.WaitGroup goroutine中写入chan的方法。在并发编程中,sync.WaitGroup是一种非常有用的同步机制,它可以等待一组goroutine的执行完成。然而,有时我们需要在goroutine执行完毕后,将结果写入到一个chan中,以供其他goroutine消费。本文将详细介绍如何在sync.WaitGroup goroutine中实现这一功能,让我们一起来看看吧!
我正在从 API 端点获取项目列表。然后,对于每个项目,我都会发出另一个 API 请求以获取有关单个项目的数据。
我无法同时对每个项目发出第二个 API 请求,因为我的 API 令牌有速率限制,如果我同时发出太多请求,我会受到限制。
但是,初始 API 响应数据可以分为多个页面,这使我能够同时处理数据页面。
经过一些研究,下面的代码完全符合我的要求:
刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很难。其实笔者也不例外,碰都不敢碰一下。但是后来在剖析 XOOPS 的程序架构时,开始发现 Smarty 其实并不难。只要将 Smarty 基础功练好,在一般应用上就已经相当足够了。当然基础能打好,后面的进阶应用也就不用怕了。 这篇文章的主要用意并非要深入探讨 Smarty 的使用,这在官方使用说明中都已经写得很完整了。笔
385
func main() {
// pretend paginated results from initial API request
page1 := []int{1, 2, 3}
page2 := []int{4, 5, 6}
page3 := []int{7, 8, 9}
pages := [][]int{page1, page2, page3}
results := make(chan string)
var wg sync.WaitGroup
for i := range pages {
wg.Add(1)
go func(i int) {
defer wg.Done()
for j := range pages[i] {
// simulate making additional API request and building the report
time.Sleep(500 * time.Millisecond)
result := fmt.Sprintf("Finished creating report for %d", pages[i][j])
results <- result
}
}(i)
}
go func() {
wg.Wait()
close(results)
}()
for result := range results {
fmt.Println(result)
}
}
我想了解为什么它能发挥作用:
go func() {
wg.Wait()
close(results)
}()
我的第一次尝试没有成功——我想我可以在 wg.Wait() 之后遍历通道,并且我会在结果写入 results 通道时读取结果。
func main() {
// pretend paginated results from initial API request
page1 := []int{1, 2, 3}
page2 := []int{4, 5, 6}
page3 := []int{7, 8, 9}
pages := [][]int{page1, page2, page3}
results := make(chan string)
var wg sync.WaitGroup
for i := range pages {
wg.Add(1)
go func(i int) {
defer wg.Done()
for j := range pages[i] {
// simulate making additional API request and building the report
time.Sleep(500 * time.Millisecond)
result := fmt.Sprintf("Finished creating report for %d", pages[i][j])
results <- result
}
}(i)
}
// does not work
wg.Wait()
close(results)
for result := range results {
fmt.Println(result)
}
}
在您的第一次尝试中:
在第二次尝试中:
以上就是在sync.WaitGroup goroutine中写入chan的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号