비동기 핸들러 — suspend 중 워커가 다른 일을 처리

H1이 await로 스레드를 놓는 동안 워커가 H2를 먼저 실행하고, 응답이 오면 H1이 resume

비동기 핸들러 — suspend 중 워커가 다른 일을 처리 H1이 await로 스레드를 놓는 동안 워커가 H2를 먼저 실행하고, 응답이 오면 H1이 resume HandleAsync() 실행 await Request(...) → suspend, 스레드 반납 워커는 즉시 다음 일로 — HandleAsync() 실행 return (완료) 응답 도착 → resume return (완료) worker 스레드 · Sequence participant worker 스레드 핸들러 A · async · Sequence participant 핸들러 A async Play 채널 · Sequence participant Play 채널 핸들러 B · async · Sequence participant 핸들러 B async

논블로킹 인터리빙

  • • H1이 await Request 지점에서 suspend되면 그 실행 흐름만 멈추고 스레드는 풀로 돌아간다 — 스레드 점유 없음.
  • • 워커는 즉시 다음 일(H2)을 집어 실행하고, H2는 H1의 응답이 오기 전에 먼저 완료된다.

resume

  • • Play 채널의 응답이 도착하면 H1이 그 자리에서 resume해 return한다.
  • • 그래서 worker 몇 개가 콜백 없이 위에서 아래로 읽히는 코드로 수많은 동시 요청을 처리한다. .Result로 막으면 스레드가 계속 점유되므로 핸들러 안에서 금지.