5章非同期プログラミング
いま、この本を読んでいる読者は、本を読むことに集中しているだろうが、もし仮に本を読んでいる最中に電話が鳴ったり、宅配便が到着したりすると、いったん本を読むのを中断してそれらの対応を行うだろう。このように、何らかの仕事を行っている最中に発生するような事象のことを、コンピュータの世界ではイベントや割り込みと呼ぶ。RustやCなど、いわゆる手続き的なプログラミング言語では、基本的に処理は実行順に記述しなければならない。処理を必ず実行順に記述しなければならないと、電話が鳴ったら本を中断して電話を取ると言ったような記述をすることは難しく、本を読み終えてから電話を取ると書かなければならない。このように書いてしまうと、当然、重要な電話を取り逃してしまう。
記述したとおりの順番で動作するようなプログラミングモデルを同期的なプログラミングと呼ぶ。非同期プログラミングは、独立して発生するイベントに対する処理を記述するための並行プログラミング手法の総称である。非同期プログラミングの手法を用いることで、電話が鳴ったら電話を取る、宅配便が到着したら宅配便を受け取る、というようにイベントに応じた動作を記述することができる。非同期プログラミングでは、どのような順番で処理が実行されるかはソースコードから判別することはできず、処理の順番はイベントの発生順に依存する。
非同期プログラミングを実現する方法として、コールバック関数やシグナル(割り込み)を用いる方法があるが、本章では特に、OSによるIO多重化方法と、現在多くのプログラミング言語で取り入れられている非同期プログラミング方法のFuture、async/awaitについて説明する。その後、Rustのasync/awaitによる非同期ライブラリのデファクトスタンダードであるTokio ...