Home  >  Article  >  Backend Development  >  what is golang channel

what is golang channel

(*-*)浩
(*-*)浩Original
2019-12-03 09:29:022756browse

what is golang channel

The channel in the Go language is the key mechanism to achieve lock-free communication between goroutines. It makes writing multi-threaded concurrent programs simple, flexible and accessible.

Channel is a core type in Go. You can think of it as a pipe, through which the concurrent core unit can send or receive data for communication. (Recommended learning: go)

Its operator is the arrow <-.

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

channel structure

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&#39;s status while holding this lock
   // (in particular, do not ready a G), as this can deadlock
   // with stack shrinking.
   lock mutex
}

The above is the detailed content of what is golang channel. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:What is Golang CgoNext article:What is Golang Cgo