Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rustは厳しいが役に立つ Part2「Rustで非同期処理!!(概要)」

Rustは厳しいが役に立つ Part2「Rustで非同期処理!!(概要)」

More Decks by NearMeの技術発表資料です

Other Decks in Programming

Transcript

  1. 0
    Rustは厳しいが役に立つ
    Part2「Rustで非同期処理!!(概要)」
    2022-08-05 第9回NearMe技術勉強会
    Kaito Asahi

    View full-size slide

  2. 1
    目次
    非同期とは? 非同期について軽くまとめています
    非同期処理を実現する”Tokio” Tokioというcrateを用いたコードの例

    View full-size slide

  3. 2
    非同期(Asynchronous)とは?
    MDNからの引用では...
    https://developer.mozilla.org/ja/docs/Glossary/Asynchronous
    非同期とは、2つ以上の事象が同時に発生したり、関連する複
    数の事象が互いの完了を待たずに発生したりする概念を指し
    ます (前のものが完了するのを待たずに複数の関連するもの
    が発生することもあります)。


    → 日本語の通り、待たないで実行することができる!

    View full-size slide

  4. 3
    非同期処理(ConcurrencyとParallelism)
    “プロセス”は、「実行前状態」→「計算途中状態」→「終了状態」と表すことにする
    (ただし、ここでは”プロセス”を”OSのプロセス”そのものではなく、抽象的な概念として言及する。
    実際、Rustの非同期処理の”プロセス”では一般に”グリーンスレッド”が利用される)
    1. Concurrency(並行処理)
    → 複数の”プロセス”を「計算途中状態」にするような処理。
    → ただし、ある時間 t では1つの”プロセス”しか実行されない(シングルタスク)。
    → 同じ処理をループでおこなうときは、初めに実行された物から出力されることが一般的。
    https://www.oreilly.co.jp/book
    s/9784873119595/
    参考:

    View full-size slide

  5. 4
    非同期処理(ConcurrencyとParallelism)
    2. Parallelism(並列処理)
    → 複数の”プロセス”を「計算途中状態」にし、さらに同時に実行状態にすることができる処理。
    → ゆえに、ループ処理では順不同で結果が出力されることがある。

    View full-size slide

  6. 5
    Rustで非同期処理に便利なcrate 〜Tokio〜
    Tokio is an asynchronous runtime for the Rust programming language. It
    provides the building blocks needed for writing networking applications.
    https://tokio.rs/
    → TokioはRustの非同期処理ランタイムの一つで、ネットワークアプリケーションの構築を助けてくれ
    る!


    View full-size slide

  7. 6
    Rustで非同期処理に便利なcrate 〜Tokio〜
    Ex) 1から10までの数字を表示する並行処理
    use futures::future;
    async fn print_number(i: i32) {
    println!("{}", i);
    }
    #[tokio::main]
    async fn main() {
    let fn_objs = (1..(10+1)).map(|i|
    print_number(i)
    );
    future::join_all(fn_objs).await;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    出力

    View full-size slide

  8. 7
    Rustで非同期処理に便利なcrate 〜Tokio〜
    Ex) 1から10までの数字を表示する並列処理
    use futures::future;
    async fn print_number(i: i32) {
    println!("{}", i);
    }
    #[tokio::main]
    async fn main() {
    let fn_objs = (1..(10+1)).map(|i|
    tokio::spawn(async move {
    print_number(i).await })
    );
    future::join_all(fn_objs).await;
    }
    5
    1
    4
    2
    3
    6
    7
    8
    9
    10
    出力

    View full-size slide