반응형
저는 보통 다음과 같은 맥락으로 맹세합니다.사용자 인터럽트, 신호, 타이머 등에 의해 정지되어야 하는 장기 실행 고루틴을 구현하기 위한 데몬 루프의 인수로서 문맥:
// Figure 1
type Daemon struct {
// .... omitted
}
func (d *Daemon) Run(ctx context.Context) {
for {
select {
case: <-ctx.Done:
return
default:
}
// do your thing
}
}
// Caller's code somewhere
ctx, cancel := context.WithCancel(...)
d.Run(ctx)
// sometime later...
cancel()
그 이유는 코드 작성기가 sync를 사용하는 추가 동기화를 NOT 사용할 수 있기 때문입니다.뮤텍스, 찬, 싱크로.상태, 동기화/아토미 등
(게다가, 저는 이상값 객체(Daemon here )와 데몬 루프 상태(예: 루프 카운터 또는 연결 풀 등)를 구분하는 것도 좋아하지만, 저는 다른 방향으로 돌아갑니다...)
그래서… 네, 이미 제 머릿속에 해결책이 있어요. 하지만 만약 내가 이것을 시행할 수 없다면?
예를 들어, 역사적 이유로 이 패턴으로 전환하는 것이 가능하지 않다면 어떨까요? 만약 우리 손이 묶였다면요?
'프로그래밍' 카테고리의 다른 글
2022년 웹 개발을 위한 10대 백엔드 프레임워크 (0) | 2022.03.10 |
---|---|
고급 파이썬: 데이터클래스 (0) | 2022.03.10 |
프런트 엔드 포트폴리오를 시작하기 위한 3가지 초보 프로젝트 아이디어 (0) | 2022.03.10 |
Cheat.sh - 궁극의 다국어 치트 시트 (0) | 2022.03.10 |
다음 프로젝트에서 MongoDB를 사용해야 하는 이유 (0) | 2022.03.10 |
댓글