Go time.After는 남용하면 메모리 누수난다
페이지 정보

영삼이
본문
✅ time.After는 남용하면 메모리 누수난다
타이머는 쓰고 나면 반드시 처리해야 한다
Go에서 타임아웃을 줄 때 흔히 이렇게 쓴다:
select {
case <-ch:
// 작업 완료
case <-time.After(5 * time.Second):
// 타임아웃 처리
}
문제는 time.After
가 내부적으로
타이머 객체를 만들고 GC 될 때까지 유지된다는 것
❌ 반복해서 쓰면 메모리 계속 쌓임
for {
select {
case <-someChan:
case <-time.After(time.Second): // 루프 돌 때마다 타이머 새로 생성
}
}
-
오래 돌리는 프로그램에서 타이머가 계속 누적됨
-
→ 메모리 누수 발생
✅ 해결: time.NewTimer
+ Stop()
사용
for {
timer := time.NewTimer(time.Second)
select {
case <-someChan:
case <-timer.C:
}
if !timer.Stop() {
<-timer.C // 잔여 타이머 제거
}
}
✔️ time.After
는 일회성 타이밍에만 사용
반복이나 장시간 프로세스엔 반드시 직접 타이머를 관리해야 한다.
- 이전글&str 대신 String을 넘기면 쓸 수 없는 이유가 생긴다 25.03.28
- 다음글slice를 함수에 넘기면 복사될까? 참조될까? 25.03.28
댓글목록
등록된 댓글이 없습니다.