C++ の非同期 I/O モデル
非同期 I/O モデルを使用すると、メインスレッドをブロックすることなく I/O 操作を同時に実行できます。計算と他のアクティビティが同時に発生する可能性があるため、これは高性能アプリケーションにとって重要です。
C++ には主に 2 つのタイプの非同期 I/O モデルがあります:
1. イベント駆動型 I/O (I/O 完了ポート)
サンプルコード:
// 创建 I/O 完成端口 HANDLE ioPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); // 为每个套接字创建通知句柄 SOCKET sock = ...; CreateIoCompletionPort((HANDLE)sock, ioPort, 0, 0); // 在单独的线程中处理通知 DWORD bytesTransferred; LPOVERLAPPED overlapped; while (GetQueuedCompletionStatus(ioPort, &bytesTransferred, &overlapped, NULL, INFINITE)) { // 处理完成的 I/O 操作 }
2. 非同期ファイルI/O
ReadFileEx()
和 WriteFileEx()
関数を使用します。イベント駆動型モデルとは異なり、通知ハンドルは使用されませんが、完了時に直接戻ります。 サンプルコード:
HANDLE fileHandle = ...; DWORD bytesTransferred; OVERLAPPED overlapped; ReadFileEx(fileHandle, buffer, sizeof(buffer), &overlapped, NULL); while (GetOverlappedResult(fileHandle, &overlapped, &bytesTransferred, FALSE)) { // 处理已完成的 I/O 操作 }
適切なモデルを選択してください
最適な非同期 I/O モデルの選択は、アプリケーションの特定の要件によって決まります:
以上がC++ の非同期 I/O モデルとは何ですか?それらの長所と短所は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。