package main import ( "fmt" "sync" "time" ) var wg sync.WaitGroup // 1\ 如果管道容量已满,向管道写入数据会导致deadline异常 // 2\如果管道已经空,向管道读出数据也会导致deadline异常 // 3\如果管道没有close,采用for range会导致deadline // 4\如果管道是在协程中调用,不会导致deadline // 向管道写入数据 func wfn(ch chan int) { for i := 0; i < 10; i++ { ch <- i time.Sleep(time.Millisecond * 100) } close(ch) wg.Done() } // 从管道读取数据 func rfn(ch chan int) { for v := range ch { fmt.Println(v) time.Sleep(time.Millisecond * 10) } wg.Done() } func main() { ch := make(chan int, 2) //采用make创建管道 fmt.Println("容积", cap(ch), "大小", len(ch)) wg.Add(1) go wfn(ch) wg.Add(1) go rfn(ch) wg.Wait() }
协程与管道操作实例
最新推荐文章于 2024-07-15 20:47:50 发布