버퍼 채널이 꽉 찼는지 확인하는 방법
Go에서 버퍼 채널은 데이터를 저장할 수 있는 용량이 제한되어 있습니다. 채널이 가득 차면 해당 채널로 데이터를 보내면 보낸 사람이 차단됩니다. 그런데 차단하는 대신 데이터를 삭제하려는 경우 채널이 꽉 찼는지 어떻게 확인할 수 있나요?
Select 문을 사용한 솔루션
확인하는 한 가지 방법 버퍼링된 채널이 꽉 찼을 때 기본 사례로 select 문을 사용하는 것입니다. 전체 채널로 데이터를 보내는 등 실행할 수 있는 사례가 없으면 기본 사례가 실행됩니다.
package main import "fmt" func main() { ch := make(chan int, 1) // Fill it up ch <- 1 select { case ch <- 2: // Put 2 in the channel unless it is full default: fmt.Println("Channel full. Discarding value") } }
출력:
Channel full. Discarding value
이 코드는 크기 1의 버퍼링된 채널을 생성하고 이를 채울 값을 보냅니다. 그런 다음 select 문은 채널에 다른 값을 보내려고 시도합니다. 채널이 가득 차면 기본 케이스가 실행되어 메시지를 인쇄하고 값을 버립니다.
보내지 않고 확인
또는 요소 수를 확인할 수 있습니다. len(ch)을 사용하여 채널에 대기합니다. 이를 통해 데이터 전송을 시도하지 않고도 채널이 꽉 찼는지 확인할 수 있습니다.
if len(ch) == cap(ch) { // Channel was full, but might not be by now } else { // Channel wasn't full, but might be by now }
단, 동시 데이터 흐름으로 인해 if 블록을 입력하는 순간 비교 결과가 무효화될 수 있다는 점에 유의하세요. .
위 내용은 Go 버퍼링된 채널이 가득 찼는지 효율적으로 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!