zoukankan      html  css  js  c++  java
  • go语言——channel特点

    知识点

    通道拥有阻塞机制(无缓冲区),有缓冲区同理。

      接收端在发送端数据发送完成之前(通道为nil),处于阻塞状态

      发送端在接收端数据拿走完成之前(通道为满),处于阻塞态

    注意点

    1.struct{}类型不占空间,作为通道的一种信号方式

    2.chan类型为引用类型,故需要进行初始化,申请空间,在通道使用结束后Close()关闭

    3.nil状态不可以进行数据通信

    4.避免在接收端关闭通道,因为不知道发送端是否再发数据,尽量发送端关闭,接收端判断。

    5.形参为单通道类型,实参为双通道类型会默认根据形参类型进行自动转换;不能利用函数声明把单向通道转换成双向通道

    6.单通道类型:<-ch :表示只读通道;ch<-:表示只写通道

    使用实例

    1.利用通道发送一个空结构类型(struct{})实现goroutine的同步机制

    var ch chan struct{}
    
    func test() {
        fmt.Println("test begin ,waitting 1 second...")
        time.Sleep(time.Second)
        fmt.Println("test end")
        ch <- struct{}{}
    }
    
    func main() {
        ch = make(chan struct{}, 1)
        fmt.Println("main begin")
        go test()
        <-ch
        fmt.Println("main end")
    }
  • 相关阅读:
    Qt数据库集成应用封装
    Qt个人研究进展
    Qt仿win7自动顶部最大化左侧右侧半屏效果
    Qt编写QUI皮肤生成器
    java定时任务
    进程间通信(java)--队列
    单例设计模式-java
    Java RMI
    远程调用方式概述
    IO模型-java版
  • 原文地址:https://www.cnblogs.com/single-dont/p/13550717.html
Copyright © 2011-2022 走看看