非同期 I/O と非同期 RPC

非同期 I/O は、1 つのスレッドが複数の I/O 要求を同時に管理するための効率的な手段です。 サーバー上の非同期 RPC は、RPC 要求に対して同様の目的を達成します。 Windows Vista より前のバージョンの Windows では、非同期 RPC を使用してサーバー プロシージャから非同期 I/O 要求を投稿することはお勧めしません。 ただし、Windows Vista 以降のバージョンの Windows では、I/O 完了ポートに関連付けられている非同期 I/O 要求が非同期 RPC でサポートされます。

Windows Vista より前のバージョンでは、非同期の I/O 要求が完了する前に、非同期リモート プロシージャ 呼び出しが完了する可能性があります。 非同期呼び出しが完了すると、RPC ランタイムが予想されるワークロードに対応できる十分なスレッドを持っている場合、そのスレッドが終了する可能性があります。 システムは、すべての I/O 要求を開始するスレッドにバインドします。 スレッドが終了すると、そのスレッドで保留中の I/O 要求はすべて中止されます。 保留中の I/O 要求を別のスレッドに移動することはできません。

そのため、Windows Vista より前のバージョンの Windows を対象とするアプリケーション デザイナーは、サーバー プロシージャで同期 I/O を使用するか、非同期 I/O を含むすべての要求を、アプリケーションが管理するスレッド プールで実行されているプロシージャに転送できます。 Windows API には、スレッド プール管理用の関数が用意されています。 「プロセス関数とスレッド関数」を参照してください。