Go channel 的應用場景
channel 適用於數據在多個協程中流動的場景,有很多實際應用:
① 任務定時
比如超時處理:
select {
case <-time.After(time.Second):
定時任務
select {
case <- time.Tick(time.Second)
② 解耦生產者和消費者
可以將生產者和消費者解耦出來,生產者只需要往 channel 發送數據,而消費者只管從 channel 中獲取數據。
③ 控制併發數
以爬蟲爲例,比如需要爬取 1w 條數據,需要併發爬取以提高效率,但併發量又不能過大,可以通過 channel 來控制併發規模,比如同時支持 5 個併發任務:
ch := make(chan int, 5)
for _, url := range urls {
go func() {
ch <- 1
worker(url)
<- ch
}
}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/9UhX0g3xStBSzl2zLHnqzA