美文网首页
golang channel的介绍

golang channel的介绍

作者: 也许会了 | 来源:发表于2021-05-17 17:05 被阅读0次

Go语言中的channel是实现goroutine间无锁通信的关键机制,他使得写多线程并发程序变得简单、灵活、触手可得。

Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。

它的操作符是箭头 <- 。

ch <- v    // 发送值v到Channel ch中

v := <-ch  // 从Channel ch中接收数据,并将数据赋值给v

channel结构

type hchan struct {

qcount   uint           // total data in the queue 队列中存在的个数

dataqsiz uint           // size of the circular queue buffer大小 实现看起来是个循环数组

buf      unsafe.Pointer // points to an array of dataqsiz elements 数组指针

elemsize uint16       //channel类型的大小

closed   uint32      //channel是否关闭

elemtype *_type // element type //channel 类型

sendx    uint   // send index  //发送index

recvx    uint   // receive index //接收index

recvq    waitq  // list of recv waiters //接收链表 即读channel的goroutine

sendq    waitq  // list of send waiters //发送链表 即写channel的goroutine

// lock protects all fields in hchan, as well as several

// fields in sudogs blocked on this channel.

//

// Do not change another G's status while holding this lock

// (in particular, do not ready a G), as this can deadlock

// with stack shrinking.

lock mutex

}

本文来自php中文网的golang栏目:https://www.php.cn/be/go/

相关文章

网友评论

      本文标题:golang channel的介绍

      本文链接:https://www.haomeiwen.com/subject/obwjjltx.html