반응형
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
BIG
'Programming > Rust' 카테고리의 다른 글
Rust 간단한 웹서버 HttpServer 올리기 (0) | 2023.04.19 |
---|---|
docker compose - rust default 컨테이너 만들기 (0) | 2023.04.11 |
Rust match (0) | 2023.03.16 |
Rust 매크로 macro_rules! (0) | 2023.03.15 |
Rust trait - 인터페이스?, 추상클래스? (0) | 2023.03.14 |
댓글