goroutine/channel(select、定時器)
阿新 • • 發佈:2019-02-01
往裏面 ack ann package var 不出 i++ 用戶 time 應用場景舉例:
一個任務管道滿了,再往裏面塞就塞不進去了,瀏覽器刷不出來了。用戶即便關了瀏覽器可能依然在阻塞......
一個任務管道滿了,再往裏面塞就塞不進去了,瀏覽器刷不出來了。用戶即便關了瀏覽器可能依然在阻塞......
package main import "fmt" import "time" func main() { var ch chan int ch = make(chan int, 10) ch2 := make(chan int, 10) go func() { var i int for { ch <- i time.Sleep(time.Second) ch2 <- i * i time.Sleep(time.Second) i++ } }() for { select { //這個case如果不能從ch中獲取數據,則會立即走下一個 case v := <-ch: fmt.Println(v) //這個case如果不能從ch2中獲取數據,則會立即走下一個 case v := <-ch2: fmt.Println(v) case <-time.After(time.Second): fmt.Println("get data timeout") time.Sleep(time.Second) default: fmt.Println("===================") time.Sleep(time.Second) } } }
goroutine/channel(select、定時器)