[go语言]goroutine的一种使用场景
var wg sync.WaitGroup
// 消息队列
ch := make(chan string, runtime.NumCPU())
// 创建消费者
for i := 0; i < runtime.NumCPU(); i++ {
go func() {
for {
file := <- ch
convert(file)
wg.Done()
}
}()
}
// 生产者
walk(path, func(file string){
wg.Add(1)
ch <- file
})
// 等待所有文件处理完成
wg.Wait()
var wg sync.WaitGroup
// 消息队列
ch := make(chan func(), runtime.NumCPU())
// 创建消费者
for i := 0; i < runtime.NumCPU(); i++ {
go func() {
for {
f := <- ch
f()
}
}()
}
// 生产者
walk(path, func(file string){
wg.Add(1)
ch <- func() {
convert(file)
wg.Done()
}
})
// 等待所有文件处理完成
wg.Wait()
var wg sync.WaitGroup
// 生成指定数量的令牌
tokens := make(chan int, runtime.NumCPU())
walk(path, func(file string){
tokens <- 1 // 获取令牌wg.Add(1)
gofunc() {
convert(file)
wg.Done()
<-tokens // 归还令牌
}()
})
// 等待所有文件处理完成
wg.Wait()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。