채널 준비를 통한 비동기 통신
Go에서 채널은 고루틴 간의 동시 통신을 촉진합니다. 버퍼링된 송신 채널과 버퍼링되지 않은 수신 채널을 처리할 때 두 채널을 동시에 선택하여 통신 흐름을 최적화할 수 있습니다. 이 문서에서는 CPU 사용률을 최소화하면서 이 기능을 구현하는 접근 방식을 살펴봅니다.
문제를 이해하려면 다음 컨텍스트를 고려하세요.
s := make(chan 데이터를 읽을 수 있을 때 r이 선택되고 데이터를 읽을 수 있을 때 s가 선택되도록 두 채널 모두에서 선택할 수 있는지 여부에 대한 의문이 제기됩니다. 채널이 꽉 차 있지 않습니다.
해결책
기본 사례가 포함된 select 문을 사용하면 이를 달성할 수 있습니다. 전송될 값은 select를 사용할 때 한 번만 평가되므로 두 채널이 모두 준비되지 않은 경우 값이 오래된 값이 됩니다. 이를 방지하기 위해 두 채널 모두 준비되지 않은 경우 실행되는 기본 사례가 선택 문에 추가됩니다. 이 기본 사례에서 프로그램은 짧은 기간 동안 휴면 상태로 유지되어 채널이 준비될 수 있도록 한 다음 업데이트된 값으로 다시 시도합니다.
s := make(chan경고
len(r) 또는 cap(s)을 사용하여 채널 준비 상태를 확인한 후 전송/수신은 채널 상태가 다음과 같이 변경될 수 있으므로 권장되지 않습니다. 확인하고 전송/수신을 시도합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3