web-dev-qa-db-ja.com

Linuxでのバッファリングされた非同期ファイルI / O

Linuxで非同期ファイルI/Oを実行するための最も効率的な方法を探しています。

POSIX glibc実装は、ユーザーランドのスレッドを使用します。

ネイティブのaioカーネルAPIはバッファリングされていない操作でのみ機能し、バッファリングされた操作のサポートを追加するカーネルのパッチが存在しますが、それらは3年以上前のものであり、メインラインに統合することを誰も気にしないようです。

非同期I/Oを可能にする他のアイデア、概念、パッチをたくさん見つけましたが、それらのほとんどは3年以上前の記事にあります。今日のカーネルで実際に利用できるのは何ですか?サーブレット、呼び出し、カーネルスレッドを含むものなど、今は覚えていないことについても読んだことがあります。

今日のカーネルでバッファリングされた非同期ファイルの入出力を行う最も効率的な方法は何ですか?

31
Marenz

資料は古いようです-まあ、それは古いです-それは長い間存在していて、決して些細なことではありませんが、よく理解されているからです。あなたが持ち上げることができる解決策は、W。リチャードスティーブンスの見事で比類のない本(「聖書」を読んでください)に掲載されています。この本は、明確、簡潔、そして完全な珍しい宝物です。すべてのページが真の即時の価値を提供します。

UNIX環境での高度なプログラミング

同じくスティーブンスによる他の2つのそのようなものは、彼のUnix Network Programmingコレクションの最初の2巻です。

ボリューム1:Sockets Networking API (FennerとRudoffと) そして
ボリューム2:プロセス間通信

これらの3冊の基本的な本がないことは想像できません。彼らのことを聞いたことがない人を見つけたとき、私はばかげています。

スティーブンの本のさらに多くは、同じように貴重です:

TCP/IP Illustrated、Vol。 1:プロトコル

3
Pete Wilson

申し訳ありませんが、O_DIRECTも使用しない限り、非同期ファイルI/OのLinuxカーネル実装は実際には使用できないと思います。

世界の現在の状態についての詳細はここにあります: https://github.com/littledan/linux-aio 。これは、Googleで働いていた人によって2012年に更新されました。

2
cmccabe