Undufered 채널 (Make (chan bool))
(Chan Bool)를 만들고 버퍼 크기가 0입니다. 이는 주어진 시간에 값을 보유 할 수 없음을 의미합니다. 결과적으로, 다른 Goroutine이 커뮤니케이션을 완료하기 위해 다른 Goroutine을 이용할 수있을 때까지 무시되지 않은 채널을 읽거나 쓰려고 시도하는 것이 차단됩니다.
버퍼링 된 채널 (Make (Chan Bool, 1))
] Make (Chan Bool, 1)로 생성 된 버퍼 채널에는 0이 아닌 버퍼 크기가 있습니다. 이 버퍼를 사용하면 Goroutines가 다른 Goroutine을 사용할 수있을 때까지 기다리지 않고도 값을 보내거나받을 수 있습니다. 버퍼는 비동기 통신을 가능하게하는 값에 대한 임시 저장소 역할을합니다.
실용적인 예
chanFoo := make(chan bool)
for i := 0; i 이 예에서 Chanfoo는 부패하지 않은 채널입니다. 프로그램이 실행되면 Goroutine은 계속해서 채널을 읽거나 쓰려고 시도하지만 Goroutine과 의사 소통 할 수 없기 때문에 여전히 차단됩니다. 결과적으로, 프로그램은 각 반복에 대해 "어느 것도"인쇄합니다.
버퍼링 된 채널이 작동중인
chanFoo := make(chan bool, 1)
for i := 0; i Chanf : = Make (Chan Bool, 1)
i : = 0; I 1의 버퍼 크기를 Chanfoo에 추가하여 비동기 통신을 활성화합니다. 이 프로그램은 이제 "읽기"및 "쓰기"메시지를 번갈아 가며, 다른 고 루틴이 읽거나 쓸 준비가 될 때까지 값을 저장하는 버퍼의 능력을 보여줍니다. Unfuffered 채널과 버퍼 채널의 차이를 이해하는 것은 GO의 효율적인 동시성 프로그래밍에 중요합니다. 부패하지 않은 채널은 동기화를 제공하는 반면 버퍼링 된 채널은 비동기 통신을 허용합니다. 신중하게 버퍼 크기를 선택하면 최적의 성능을 제공하고 잠재적 인 차단 또는 교착 상태를 피할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3