>  기사  >  백엔드 개발  >  golang 채널이 뭐예요?

golang 채널이 뭐예요?

(*-*)浩
(*-*)浩원래의
2019-12-03 09:29:022755검색

golang 채널이 뭐예요?

Go 언어의 채널은 고루틴 간의 잠금 없는 통신을 달성하는 핵심 메커니즘으로, 다중 스레드 동시 프로그램 작성을 간단하고 유연하며 접근 가능하게 만듭니다.

채널은 Go의 핵심 유형으로, 동시 코어 단위가 통신을 위해 데이터를 보내고 받을 수 있는 파이프로 생각하면 됩니다. (추천 학습: go)

연산자는 화살표 <-입니다.

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

채널 구조

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
}

위 내용은 golang 채널이 뭐예요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.