php 편집자 Youzi는 이 기사에서 "Go 채널의 버퍼가 쓰기/읽기를 올바르게 제한하지 않는 이유는 무엇입니까?"라는 일반적인 질문에 답할 것입니다. Go 언어에서 채널은 코루틴 통신 메커니즘에 사용되는 방법입니다. 버퍼와 함께 채널을 사용할 때 쓰기 또는 읽기 작업 수를 제한하여 프로그램의 동작을 제어할 수 있을 것으로 기대합니다. 그러나 실제로 채널 버퍼는 쓰기/읽기 작업 수를 직접 제한할 수 없습니다. 이 문제의 원인과 해결 방법은 아래에서 자세히 설명하겠습니다.
채널을 이용하여 두 바둑루틴간 소통을 하려고 합니다. 먼저 정수 채널을 만든 다음 이를 0부터 10까지의 일련의 숫자를 인쇄하는 go 루틴에 매개변수로 전달했습니다. 이러한 프로그램의 출력은 의미가 없습니다.
주 코드는 다음과 같습니다:
으아악이 코드 실행에서 다음과 같은 결과가 나왔습니다.
으아악두 번의 쓰기 실행과 두 번의 읽기 실행이 있다는 점에 유의하세요.
나중에 다음 기능을 달성하기 위해 버퍼 크기를 설정했습니다.
으아악그러면 다음과 같은 결과가 나옵니다:
으아악이제 5번의 쓰기 실행과 5번의 읽기 실행이 이루어졌습니다.
코드와 출력이 확보되면 마지막 질문이 생깁니다. 이러한 실행이 왜 그렇게 작동하는 걸까요? 첫째, 한 번에 하나의 숫자만 읽고 써야 하는 것 아닌가요? 게다가 두 번째 실행에서 매번 3개가 아닌 5개의 숫자를 읽고 쓰는 이유는 무엇입니까(버퍼 크기이기 때문에)?
메시지를 인쇄할 때와 채널에서 숫자를 읽거나 쓸 때 혼란스러워집니다.
쓰기가 발생하면 "쓰기" 메시지가 발생하지 않습니다. 쓰기 사이의 어느 시점에서 발생합니다. 마찬가지로 "읽기" 메시지는 읽기 사이의 특정 지점에서 발생합니다.
다음은 표시된 출력을 생성하는 첫 번째 코드 조각을 배열하는 한 가지 방법입니다.
컨트롤은 이렇게 메인과 워커 사이에 지속적으로 전달되며, 각각은 차단되기 전에 2개의 메시지를 인쇄합니다.
마찬가지로 두 번째 클립은 다음과 같이 정리할 수 있습니다:
위 내용은 Go 채널의 버퍼 제한이 올바르게 쓰기/읽기되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!