码迷,mamicode.com
首页 > 其他好文 > 详细

go16---select

时间:2017-12-22 00:29:08      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:bsp   cas   传递   异步   ann   大小   没有   port   --   

package main

/*
Channel

Channel 是 goroutine 沟通的桥梁, goroutine是通过通信来进行内存的共享,
而不是通过内存的共享来进行通信,通过Channel通道来共享内存,
通过通道的通信(写进去在读出来)进行数据的传递,大都是阻塞同步的
通过 make 创建,close 关闭
Channel 是引用类型
可以使用 for range 来迭代不断操作 channel
可以设置单向(只读或者只写)或双向通道(读写)
可以设置缓存大小,不设置就是0是阻塞的,在未被填满前不会发生阻塞,
有缓存是异步的无缓存是同步的,

Select

可处理一个或多个 channel 的发送与接收
同时有多个可用的 channel时按随机顺序处理
可用空的 select 来阻塞 main 函数
*/
import (
    "fmt"
)

func main1() {
    c := make(chan int)
    go func() { //不断从c读值
        for v := range c {
            fmt.Println(v)
        }
    }()

    for {
        select { //随机向c中写0或者1
        case c <- 0:
        case c <- 1:
        }
    }

}

func main() {
    c := make(chan int)
    go func() { //不断从c读值
        for v := range c {
            fmt.Println(v)
        }
    }()

    for {
        select {} //空的select,没有发送和接收,完全阻塞main函数,
    }

}

/*
    c1: 1
    c2: c2
    c1: 3
    c2: c22
*/

 

go16---select

标签:bsp   cas   传递   异步   ann   大小   没有   port   --   

原文地址:http://www.cnblogs.com/yaowen/p/8082901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!