Asynchronous (非同期)

非同期 (asynchronous) という用語は、 2 つ以上のオブジェクトやイベントが同時に存在しない、または起こらない、すなわち同期していないことを表します。複数の関連のあることが、前回起こったことの完了に依存することなく起こるとき、それらは非同期です。

コンピューターの世界では、「非同期」という言葉は主に 2 つの文脈で使われています。

ネットワークと通信

非同期通信とは、各メッセージの送受信や処理が他のメッセージの送受信や処理に依存しないメッセージ交換の方式です。非同期通信では、それぞれの当事者は、メッセージを受信したらすぐに処理を行うのではなく、都合の良いときや可能なときにメッセージを受信して処理を行います。さらに、問題が発生した場合、受信者が修正をリクエストするか、その他の方法で処理することを理解した上で、確認の連絡を待たずにメッセージを送信することもできます。

人のやりとりの場合、電子メールは非同期通信の 1 つです。送信者がメールを送信すると、受信者は受信直後ではなく都合の良いタイミングでメッセージを読んで返信します。両者ともに、好きなときに送信や受信を継続でき、お互いにスケジュールを調整する必要はありません。

非同期ソフトウェアでは、サーバーなどにリクエストを行った後、応答を待っている間に他のプロセスがブロックされることはありません。ソフトウェアは他のタスクを実行し続けることができます。例えばプロミスベースの API では、 Promise オブジェクトが長い処理のために作成されます。処理を完全に運営した後、プロミスは処理されます。プロミスがあれば、ソフトウェアは処理の完了を待つ必要がありません。

ソフトウェア設計

非同期ソフトウェア設計は、元タスク(または複数のタスク)と横に並んだタスクの実行をプログラムに依頼し、タスクの完了を待つことなく実行できるコードを構築することで、この概念を展開させたものです。第 2 のタスクが完了すると、元のタスクは合意されたメカニズムを使って通知され、作業が完了したこと、もしあれば結果が利用できることを知ることができます。

非同期ソフトウェアを実装するプログラミングテクニックは数多くあります。学んでみたければ、非同期 JavaScript の記事をご覧下さい。

関連情報