더북(TheBook)

백그라운드에서 무슨 일이 일어나고 있는지 알아보기 위해 예를 들어 보자. 그림 2-12를 참조한다.

1 러스트 코드에서 함수를 async로 표시한다. 함수 반환이 이루어지는 부분에 await를 붙이면 컴파일할 때 해당 함수가 Future 타입을 반환한다고 런타임(tokio 등)에 알려준다.

2 런타임은 이 코드 조각을 가져와 실행자에게 넘긴다. 실행자는 Future에서 poll 메서드를 호출할 책임을 진다.

3 네트워크 요청인 경우 런타임은 커널에 비동기 소켓을 생성하는 Mio에 요청을 전달하고 작업을 완료하는 데 필요한 CPU 시간을 요청한다.

4 커널이 작업(예를 들어 요청 보내기와 응답 받기)을 완료하면 소켓에서 대기 중인 프로세스에 알린다. 그런 다음 반응자는 실행자를 깨워 커널에서 반환된 결과로 계속 계산하게 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.