Asyncの基礎

「Async」は複数のタスクが並行処理される並行性モデルです。それぞれのタスクはブロックされるまで実行され、そして次に進むことのできる他のタスクに切り替えることにより実現されます。このモデルは限られた数のスレッド上でより多くのタスクを実行することを可能にします。なぜなら、タスクごとのオーバーヘッドは通常はとても低く、効率的に実行可能なI/Oを特定するために必要なプリミティブをOSが提供してくれるからです。

Rustの非同期的な操作は「future」に基づいていて、これは将来に完了するかもしれない作業を表しています。Futureは、タスクが完了したことを知らせるシグナルが得られるまでポーリングされます。

Futureは非同期的なランタイムによりポーリングされます。ランタイムにはいくつかの選択肢があります。

他の言語との比較

  • Pythonには似たようなモデルがasyncioとして搭載されています。しかし、ここでのFuture型はコールバックに基づくものであって、ポーリングによるものではありません。Pythonの非同期プログラムは「ループ」を必要とし、Rustのランタイムに似ています。

  • JavaScriptのPromiseは似ているものの、これもまたもやコールバックに基づきます。 この言語のランタイムはイベントループにより実装されているため、多くのPromise解決の詳細は隠されています。