golang channel的介绍

2021-05-17  本文已影响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/

上一篇下一篇

猜你喜欢

热点阅读