1

誰が読書のためのタスクを実行していますか?カーネル?そして、タスクはどこにキューイングされますか?キューはすべてのプロセスで同じですか?

http://linux.die.net/man/3/aio_read

aio_read()関数は、aiocbpが指すバッファーによって記述されたI/O要求をキューに入れます。この関数は、read(2)の非同期アナログです。

4

2 に答える 2

3

カーネルは、プロセスの要求に応じてI/O要求を開始します。プロセスは進み、他のことを行います。I / Oは通常、メモリ操作よりもはるかに遅いため、これは、読み取りが完了する前にプロセスが多くの作業を実行できることを意味します。I / Oは非同期で完了します。つまり、プロセスはブロックされず、I / Oサブシステムがディスクに出てデータを返す間、何もせずにそこに留まりません。

例えは、あなたが食事をしているときに、友達にコップ一杯の水をもらうように頼むことです。友達が水を飲んでいる間、あなたは食べ続けます。友達が後で戻ってきたら、あなたは水を飲みます。これは、コップ一杯の水の非同期配信です。同期とは、テーブルに座って何もせず、コップ一杯の水を待つ以外に何もできないことを意味します

于 2013-03-24T02:16:45.187 に答える
0

私の理解では、タスクはaio_readを呼び出すプロセスによって実行されます。結果は、元の呼び出しで指定したリターンバッファーにキューに入れられる必要があります。これは、プロセスと出力を読み取ろうとしているソケットによって、それらが同時に実行されている場合でも、格納されるバッファーが異なるため、異なることを意味します。

うまくいけば、それは役に立ちました。追加情報については、以下に投稿したIBMSourceを参照してください。

Asynchronous I/O is currently only supported for sockets. The aio_offset field may be set but it will be ignored.

IBM Source

于 2013-03-23T18:45:57.953 に答える