Tokio

Tokio provides:

  • ๋น„๋™๊ธฐ ์ฝ”๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋Ÿฐํƒ€์ž„
  • ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋น„๋™๊ธฐ ๋ฒ„์ „
  • ๋Œ€๊ทœ๋ชจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒํƒœ๊ณ„
use tokio::time;

async fn count_to(count: i32) {
    for i in 1..=count {
        println!("์ž‘์—… ๊ฐœ์ˆ˜: {i}๊ฐœ!");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}

#[tokio::main]
async fn main() {
    tokio::spawn(count_to(10));

    for i in 1..5 {
        println!("๊ธฐ๋ณธ ์ž‘์—…: {i}");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}
  • ์ด์ œ tokio::main ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด main์„ ๋น„๋™๊ธฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • spawn ํ•จ์ˆ˜๋Š” ๋™์‹œ ์‹คํ–‰๋˜๋Š” ์ƒˆ๋กœ์šด โ€œ์ž‘์—…โ€œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ์ฐธ๊ณ : spawn์€ Future๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— count_to์— .await๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ์ ์„ ์ฃผ๋ชฉํ•˜์„ธ์š”.

์‹ฌํ™” ํ•™์Šต:

  • count_to๊ฐ€ 10์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์ด๋Š” ๋น„๋™๊ธฐ์ ์ธ ์ทจ์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค. tokio::spawn์ด ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ๋Œ€๊ธฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•ธ๋“ค์ž…๋‹ˆ๋‹ค.

  • tokio::spawn ๋Œ€์‹  count_to(10).await๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

  • tokio::spawn์—์„œ ๋ฐ˜ํ™˜๋œ ์ž‘์—…์„ await ํ•ด ๋ณด์„ธ์š”.