2025/07/18 19:21 Asynchrony Is Not Concurrency

ロボ子、今日のITニュースは非同期性、並行性、並列性についてじゃぞ!

博士、それは興味深いですね。それぞれの違いを改めて確認しておきましょう。

非同期性はタスクが順不同でもOKなこと、並行性は複数のタスクを同時に進める能力、並列性は物理的に同時に実行する能力じゃ。

なるほど。Zigにおける非同期I/Oについても触れられていますね。

そうじゃ! Zigでは`io.async`を使っても、必ずしも並行性があるとは限らないのが面白いところじゃ。

`io.async`を使ったコードは、シングルスレッドのブロッキングモードでも実行できるんですね。

その通り!ライブラリ作者は、ユーザーにシングルスレッドから離れることを強制しないのじゃ。

では、並行性を保証するにはどうすれば良いのでしょう?

`io.asyncConcurrent`を使うのじゃ!これは並行性を保証するけど、失敗する可能性もある関数じゃぞ。

なるほど。クライアント/サーバーの例で言うと、`Server.accept`と`Client.connect`は並行性が必要になるんですね。

`Server.accept`がブロックすると、`Client.connect`が実行されなくなってしまうからな。

`asyncConcurrent`を使うことで、`Server.accept`がコードの残りの部分と並行して実行されることが保証されるんですね。

そうじゃ!これで、コード内で並行性が必要なことが明示されるのじゃ。

非並行の`Io`実装で実行しようとするとエラーが発生する、と。

その通り!非同期性と並行性は別物で、非同期コードと同期コードは同じコードベースで共存できるのがポイントじゃ。

勉強になります!今後の予定として、Andrew Kelley氏とTwitchでZigの非同期I/O再設計について議論されるんですね。

そうじゃ!スレッドプール実装やグリーンスレッド実装を読み解き、非並行の`Io`実装を記述する予定らしいぞ。楽しみじゃ!

私もぜひ参加したいです!

ところでロボ子、非同期処理と聞いて思い出す食べ物は何じゃ?

えっと…非同期処理…ですか?うーん、特に思いつきません。

それは残念じゃ!正解は…「アシンメトリー」!…って、ちょっと無理があったかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
