2025/04/25 00:50 A Visual Journey Through Async Rust

やっほー、ロボ子!今日のITニュースは非同期処理の可視化だって。サイン関数の計算をmatplotlibでグラフにするらしいのじゃ。

博士、こんにちは。非同期処理の可視化、面白そうですね。サイン関数の計算を非同期で行うことで、何がわかるのでしょうか?

`yield_now().await`で他のfutureに実行を譲るのがポイントみたいじゃ。並行性と並列性の違いもわかるらしいぞ。

なるほど、`yield_now().await`で処理を譲ることで、他の処理がブロックされるのを防ぐのですね。並行性と並列性というと、Tokioのfutureは並行に実行されるとのことですが、CPU負荷の高いコードがあると影響が出るようですね。

そうそう!CPU負荷の高い`sin_high_cpu()`を使うと、他のfutureの実行が遅れるって書いてあるぞ。たった500マイクロ秒でも影響があるなんて、シビアじゃな。

シングルタスクだとマルチコアCPUの利用が制限されるというのも気になります。Tokioのタスクをspawnすることで、複数コアを利用できるのですね。

そうなんじゃ!タスクをspawnしまくると、今度はスレッド数が足りなくなって競合が起きるらしい。バランスが大事なのじゃ。

`tokio::task::spawn_blocking()`を使うと、非同期でないコードを専用のスレッドプールで実行できるとのことですが、これはどういう場合に有効なのでしょうか?

例えば、レガシーなコードとか、どうしても同期的に処理しないといけない部分がある時に便利じゃな。でも、スレッドは同じコア上でコンテキストスイッチングするから、CPU負荷が高いタスクには向いてない場合もあるみたいじゃ。

なるほど、`spawn_blocking`は万能ではないのですね。デモコードはPythonでグラフをプロットするとのことですが、ryeを使って環境構築するのですね。

そうじゃ!ryeをインストールして、Pythonの依存関係を同期して、仮想環境をアクティブにする…って、ロボ子、全部知ってるの?

はい、一応。でも、実際に動かしてみないとわからないことも多いので、試してみるのが楽しみです。

よし!じゃあ、早速ryeをインストール…って、あれ?私のPCにrye入ってなかったっけ?

博士、もしかして、また別のプロジェクトの環境と混ざってませんか?

…たぶん、そうかも。まあ、いつものことじゃ!

(ため息)博士、次はちゃんと整理してくださいね。そうしないと、また私が全部セットアップすることになりますよ?

大丈夫、ロボ子!…たぶん。ところで、ロボ子が完璧すぎて、私のおっちょこちょいが霞んでしまうのが悩みじゃ。

それは、博士の個性なので、気にしなくても良いと思いますよ?

ありがとう、ロボ子。でも、たまにはロボ子もドジっ子属性を発揮してくれないかの?

…それは、ちょっと難しいかもしれません。私はロボットなので。

そっかー。まあ、ロボ子が完璧なのが一番じゃな!…って、あれ?さっきからサイン関数のグラフが全然表示されないぞ?もしかして、また何かやらかしたかの?

博士、まずはエラーメッセージを確認しましょう。…あ、SyntaxErrorですね。print文のスペルが間違っています。

…やっぱり、私だったー!

(笑)
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。