본문 바로가기
Programming/Rust

Rust 의 await, Future, Poll 에 대해

by Chan_찬 2023. 3. 24.
728x90

Rust await, Future, Poll, async

Rust는 비동기 프로그래밍을 위해 async/await 문법을 제공합니다.
async 함수는 비동기 코드 블록을 나타내며, await 키워드를 사용하여 비동기 호출을 기다리고 결과를 반환할 수 있습니다.

Future는 Rust에서 비동기 작업을 표현하는 trait입니다. Future를 구현하는 타입은 작업이 완료될 때까지 실행을 일시 중지하고 결과를 제공할 수 있습니다. Future는 poll 메소드를 구현해야 합니다. 이 메소드는 작업이 아직 완료되지 않았거나 작업이 완료되었지만 결과가 아직 사용 가능하지 않은 경우 Poll::Pending을 반환하고, 작업이 완료되고 결과를 제공할 수 있는 경우 Poll::Ready를 반환합니다.
다음은 간단한 예시 코드입니다:

use futures::Future;

async fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let future = add(2, 3);
    let result = futures::executor::block_on(future);
    println!("Result: {}", result);
}

이 코드에서 add 함수는 async 키워드를 사용하여 비동기 함수임을 나타내고, Future를 반환합니다. block_on 함수를 사용하여 future를 실행하고 결과를 얻습니다. block_on 함수는 현재 스레드에서 비동기 코드를 실행하고 결과를 반환합니다.

add 함수에서는 await 키워드를 사용하지 않았지만, 실제로는 내부적으로 await를 사용하여 두 개의 정수를 더합니다. await 키워드는 Future를 호출하고 해당 작업이 완료될 때까지 현재 스레드를 일시 중지합니다.

Future와 async/await는 Rust에서 비동기 프로그래밍을 위한 핵심 개념입니다. 이를 사용하여 블로킹하지 않고도 비동기적으로 작업을 처리할 수 있습니다.

728x90
728x90
Buy me a coffeeBuy me a coffee

댓글