zoukankan      html  css  js  c++  java
  • go16---select

    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
    */
  • 相关阅读:
    生产环境常见的几种JVM异常
    JVM垃圾回收时如何确定垃圾?是否知道什么是GCRoots?
    你平时工作用过的JVM常用基本配置参数有哪些?
    java X参数
    JUC之CAS
    JUC之List集合
    JUC之lock
    JUC之volatile
    BZOJ2132: 圈地计划
    BZOJ3991: [SDOI2015]寻宝游戏
  • 原文地址:https://www.cnblogs.com/yaowen/p/8082901.html
Copyright © 2011-2022 走看看