golang channel详解
原文链接 http://yonghaowu.github.io/2017/05/02/GolangChannel/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
- 多线程的并发处理: 在有限时间内, 同时并发处理 n 个资源
//from https://talks.golang.org/2012/concurrency.slide#47
c := make(chan Result)
go func() { c <- Web(query) } ()
go func() { c <- Image(query) } ()
go func() { c <- Video(query) } ()
timeout := time.After(80 * time.Millisecond)
for i := 0; i < 3; i++ {
select {
case result := <-c:
results = append(results, result)
case <-timeout:
fmt.Println("timed out")
return
}
}
return
- 利用 ticker 监控
func monitorInstallProgress(s *InstalledSkill, c mindsocket.RemoteConn, body io.ReadCloser) {
for {
select {
case <-s.passThru.ticker.C:
if err := sendInstallProcess(s, c); err != nil {
return
}
case <-s.passThru.quit:
body.Close()
loggers.Debug.Println("quit succeed")
return
}
}
}
- 待续..