非同期IO
さらにこれらを発展させたものとして、C# 5.0/VB.NET 11以降や、Python 3.5以降にはasync/await構文が用意されている。なお、F#には非同期ワークフロー (asynchronous workflow) と呼ばれる、TPLとは異なる独自のインフラを利用した非同期プログラミングのための機能が備わっている。C++ではC++20にてco_await構文が標準化された。
JavaScriptはシングルスレッドで動作するため、非同期プログラミングはイベント駆動ベースの疑似的な手法に頼らざるを得なかったが、Web Workerによってマルチスレッドプログラミングがサポートされるようになった(Web Workerのスレッドではメモリ空間を共有せず、実際にはメッセージベースのマルチプロセスプログラミングとなる)。そのほか、ECMAScript 2015 (ES2015) ではPromiseが、ES2017ではasync/await構文が標準化された。
基本的な呼び出し方法は、以下のステップである(前提とするAPIによって異なる。ここで示すのは一例)。
実行するシステムコールの内容をリンクリストで記述する。
リンクリストをパラメータとして、非同期システムコールを発行する(呼び出す)。
エラーあるいは、終了しているかどうかを、問い合わせるシステムコールを発行する。
終了待ちシステムコールを発行するか、既に発行したシステムコールをキャンセルするシステムコールを発行する。
組込型RTOSやミニコンピュータでの実装は、非同期システムコール発行時に、システムサービスコールをOSの処理として行うが、UNIXやLinuxの処理では、ユーザースレッドとして処理を行っている実装が多い。
下記の例では、lio_listio(...);に続いて、aio_suspend(...);を実行しているため、実質的にwrite()と同じになる。