programing tip

채널을 열어 두어도 되나요?

itbloger 2020. 6. 25. 21:24
반응형

채널을 열어 두어도 되나요?


상태를 확인하지 않으면 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

반응형