しばらくの間、私は nix マシンで非同期プログラミング/動作を達成するためのさまざまな方法について知るために多くのことをグーグルで調べてきましたが、(以前に知っていたように) 真の非同期パターン (同時実行性) がまだ存在しないという事実が確認されました。 Windows (IOCP) で使用できるように、Linux ではシングル スレッドを使用します。
以下は、Linux に存在するいくつかの代替手段です。
- select/poll/epoll :: epoll がまだ呼び出しをブロックしているため、シングル スレッドを使用して実行することはできません。また、監視対象のファイル記述子は、非ブロッキング モードで開く必要があります。
- libaio :: 私が知ったのは、その実装がうまくいかず、Windows I/O 完了ポートのように完了ベースではなく、依然として通知ベースであるということです。
- Boost ASIO :: Linux で epoll を使用するため、proactor デザイン パターンを達成するためにユーザー コードから完全に抽象化されたスレッドを生成するため、真の非同期パターンではありません。
- libevent :: ASIO の方が好きなのですが、それを選ぶ理由はありますか?
ここに質問があります:)
- epoll を使用して高速でスケーラブルなネットワーク サーバーを作成するための最適な設計パターンは何でしょうか (もちろん、ここではスレッドを使用する必要があります :( )
- 「ノンブロッキングモードではソケットのみを開くことができる」とどこかで読んだことがあります。したがって、epoll はソケットのみをサポートするため、ディスク I/O には使用できません。上記の説明はどの程度正しいのでしょうか? また、 epoll を使用してディスク I/O で非同期プログラミングを実行できないのはなぜですか?
- Boost ASIO は、epoll 呼び出しの周りに 1 つの大きなロックを使用します。その意味と、asio自体を使用してそれを克服する方法を実際には理解していませんでした。同様の質問
- ディスク ファイルで動作するように ASIO パターンを変更するにはどうすればよいですか? おすすめのデザインパターンはありますか?
誰かが素晴らしい説明ですべての質問に答えることができることを願っています. epoll および AIO 設計パターンの実装の詳細が説明されているソースへのリンクも歓迎します。