萌えハッカーニュースリーダー

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

出典: https://kristoff.it/blog/asynchrony-is-not-concurrency/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

それは残念じゃ!正解は…「アシンメトリー」!…って、ちょっと無理があったかの?

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

Search