Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Golang-Kanal?

Was ist der Golang-Kanal?

(*-*)浩
(*-*)浩Original
2019-12-03 09:29:022760Durchsuche

Was ist der Golang-Kanal?

Der Kanal in der Go-Sprache ist der Schlüsselmechanismus, um eine sperrenfreie Kommunikation zwischen Goroutinen zu erreichen. Er macht das Schreiben gleichzeitiger Multithread-Programme einfach, flexibel und zugänglich.

Kanal ist ein Kerntyp in Go. Sie können ihn sich als eine Pipe vorstellen, über die gleichzeitige Kerneinheiten Daten zur Kommunikation senden oder empfangen können. (Empfohlenes Lernen: go)

Sein Operator ist der Pfeil <-.

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

Kanalstruktur

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
}

Das obige ist der detaillierte Inhalt vonWas ist der Golang-Kanal?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist Golang CgoNächster Artikel:Was ist Golang Cgo