생산이 소비보다 빠를 때의 네 갈래

생산이 소비보다 빠를 때의 네 갈래 A workflow diagram generated by Archify. 01 / 생산 · 소비 02 / 유실 없이 전달 03 / 버리는 쪽 EX / 정하지 않았을 때 속도 차이 확인 전략 선택 결과 하나도 잃으면 안 되는 값 버려도 되는 값 생산자 · 초당 100건 · 생산 · 소비 › 속도 차이 확인 생산자 초당 100건 속도 차이 · 소비자는 초당 10건 · 생산 · 소비 › 속도 차이 확인 속도 차이 소비자는 초당 10건 누가 양보할까 · 값의 성격으로 고른다 · 생산 · 소비 › 전략 선택 · 반드시 정한다 누가 양보할까 값의 성격으로 고른다 반드시 정한다 소비자 · 처리 완료 · 생산 · 소비 › 결과 소비자 처리 완료 차단 후 대기 · suspend send · 유실 없이 전달 › 하나도 잃으면 안 되는 값 › 전략 선택 차단 후 대기 suspend send 버퍼링 · 상한 있는 큐 · 유실 없이 전달 › 하나도 잃으면 안 되는 값 › 결과 버퍼링 상한 있는 큐 버리기 · throttle · 비차단 전송 · 버리는 쪽 › 버려도 되는 값 › 전략 선택 버리기 throttle · 비차단 전송 최신값만 유지 · 중간값은 건너뜀 · 버리는 쪽 › 버려도 되는 값 › 결과 최신값만 유지 중간값은 건너뜀 메모리 폭증 · 상한 없이 쌓임 · 정하지 않았을 때 › 전략 선택 메모리 폭증 상한 없이 쌓임 화면 멈춤 · 제어 없이 그대로 처리 · 정하지 않았을 때 › 전략 선택 화면 멈춤 제어 없이 그대로 처리 전부 전달 그대로 두면 그냥 쌓으면 잠깐의 폭주 최신값만 중요 연타 · 중복 하나도 잃으면 안 됨 이벤트 Legend User UI Agent logic Policy Tool action Context / trace Cloud service External system

값의 성격이 전략을 정한다

  • • 연타 클릭은 버려도 된다
  • • 화면 전환은 하나도 잃으면 안 된다
  • • UI 상태는 마지막 값만 맞으면 된다

정하지 않으면 둘 중 하나

  • • 상한 없는 버퍼는 메모리를 먹는다
  • • 제어 없는 처리는 화면을 멈춘다
  • • 둘 다 기능 버그로 보이지만 원인은 속도 차이다

두 가지 습관

  • • 버퍼에는 상한을 둔다
  • • 버릴 때는 버렸다고 로그를 남긴다