채널을 열어 두어도 되나요?
상태를 확인하지 않으면 Go 채널을 계속 열어 두어야합니다 (채널을 닫지 마십시오)? 메모리 누수가 발생합니까? 다음 코드는 괜찮습니까?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
Go 채널을 영원히 열어두고 닫지 않는 것이 좋습니다. 채널이 더 이상 사용되지 않으면 가비지 수집됩니다.
수신기가 클로즈를 찾고있는 경우에만 채널을 닫아야합니다. 채널을 닫는 것은 더 이상 데이터가 뒤 따르지 않음을 나타내는 채널의 제어 신호입니다.
예, 채널을 열어 두는 것이 좋습니다. 으로 이동 프로그래밍 언어 책은 말했다 :
작업이 끝나면 모든 채널을 닫을 필요는 없습니다. 수신 고 루틴에게 모든 데이터가 전송되었음을 알리는 것이 중요 할 때만 채널을 닫으면됩니다. 가비지 수집기가 도달 할 수 없다고 결정한 채널은 닫혔는지 여부에 관계없이 자원을 회수합니다. (이것은 열린 파일에 대한 닫기 작업과 혼동하지 마십시오. 작업 이 끝나면 모든 파일에 대해 Close 메서드 를 호출하는 것이 중요 합니다.)
예, 채널을 열어 두는 것이 좋습니다. 실제로는 일반적입니다. 열려있는 채널은 채널 객체에 대한 참조를 구성하지 않으므로 가비지 수집되지 않습니다.
Go는 가비지 수집이므로 실제로는 '무료'가 필요 없습니다.
채널을 닫을 가능성이 있지만 대부분 close-channel로 사용됩니다. 해당 채널에 다른 것은 전송되지 않는다고 goroutine (또는 메인 프로그램)에게 알려주십시오.
참고 URL : https://stackoverflow.com/questions/8593645/is-it-ok-to-leave-a-channel-open
'programing tip' 카테고리의 다른 글
힘내 : 병합 커밋의 메시지를 편집 / 변경하는 방법은 무엇입니까? (0) | 2020.06.25 |
---|---|
jQuery document.ready 대 자체 호출 익명 함수 (0) | 2020.06.25 |
ASP.NET 웹 API를 사용하는 JSONP (0) | 2020.06.24 |
Bash에서 마지막 명령의 출력 재사용 (0) | 2020.06.24 |
System.Diagnostics.Debug.Write 출력은 어디에 나타 납니까? (0) | 2020.06.24 |