📌

Rust 初心者のための非同期入門:上司と部下にたとえてわかるFutureとランタイム

に公開

非同期処理は難しそう…でもちょっとした視点の切り替えで、実はぐっとわかりやすくなるんです。 本記事では、VOICEVOX に登場するキャラクター「ずんだもん」「めたん」「つむぎ」の対話形式で、非同期処理・ランタイム・async fn in traits など Rust の重要トピックを親しみやすく解説します。

Tokio はどんな上司? async-std との違いは? そして FFI の外注先とは?

あなたのRustライフの視界が変わるかもしれません。

この記事は ChatGPT で生成しました。


ずんだもん「非同期処理ってなに?ポーリングってめんどうそう…」
めたん「それ、上司と部下に例えると分かりやすいですよ」


ずんだもん

非同期処理って、いまいちピンとこないのだ。 「Future を poll する」とか「ランタイムが必要」とか、聞いただけで混乱してしまうのだ。

めたん

よくあるつまずきポイントですね。じゃあ、お仕事に例えてみましょうか。 非同期処理を理解するには、「自分が手を動かす」視点じゃなくて、「他人に仕事を任せて管理する」上司のような視点が必要なんですよ。

ずんだもん

上司…? ますますわからなくなってきたのだ。

めたん

たとえば、ずんだもんが料理中に煮物を火にかけたとしましょう。 ずっと鍋の前にはいませんよね? 時々フタを開けて「焦げてないかな?」って確認しますよね? それが、ポーリング(poll)っていう考え方なんですよ。

ずんだもん

なるほど、それならイメージできるのだ! poll() は鍋チェックなのだ。

めたん

そうそう。非同期処理では、部下(Future)に「これお願い」って頼むだけではダメで、 終わったかどうかを上司(イベントループ)が定期的に確認する必要があるんです。

ずんだもん

なるほど…。でも、Rust には Tokio って便利そうなものがあるのだ?

めたん

Tokio は超優秀だけどマイルールが強い部長みたいな存在です。 Tokio 部長の指揮下では何でもやってくれるけど、その分 Tokio 式で全部揃えないと動かせないんですよ。

ずんだもん

じゃあ、Tokio 部長のやり方が通じないと困る場面もあるのだ?

めたん

そうです。たとえば外注先、つまり FFI(C や Python)とやり取りするとき、Tokio のルールが通じないんです。 ランタイムを立てて poll を回すなんて、普通はやりませんから。

ずんだもん

じゃあ、ほかに柔軟なやり方はあるの?

めたん

あります。たとえば async-std 課長みたいな存在は、少人数で動きやすくて、ルールもゆるめ。 あるいは現場の係長(手動 poll)のように、自分で一件ずつ様子を見るやり方もあります。

つるぎ(ナレーション)

ちなみに、煮物を見守ったり、洗濯機の終了を確認するのも、poll の一種と考えられます。 Rust で非同期処理を書くというのは、まさにこの「見守る仕事」をコードで表すということなんです。

Discussion