質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

解決済

I/Oでの長い待ち時間では、何が起こっているのでしょうか?プロセスは何も処理していないですよね?

asapan
asapan

総合スコア48

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

3回答

-2評価

2クリップ

545閲覧

投稿2022/05/20 06:07

編集2022/05/21 12:59

具体的ではなく、一般的な話になりますが、I/Oで待ち時間が勿体無いから非同期にして待機時間で別の処理をするなどの話がよくあります。例えばCPUが1コアしかない場合、アプリケーションの処理の途中にファイルIOの処理が入っているとき、非同期にすれば待ち時間に別の処理ができたりします。もしI/Oに関する処理でCPUを使っている場合は、CPU1コアをそれで使っているので、待ち時間に別の処理はできないはずです。しかし、一般には別の処理ができているので気になっています。

これはつまり、同期処理の場合で考えれば、I/Oでの待ち時間では、アプリもOSもCPUを使っていない(プロセスを実行していない、停止している)、ということですよね。

この認識であっていますか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

fana

2022/05/20 06:24

CPUが本当にIO処理にかかりっきりであれば,他のことはできないでしょう. つまり,「かかりっきり」にならないように頑張ってるって話です. 複数の作業がCPUを時分割で使えば見た目には並列に動いてるように見えるでしょう. あと,何かしら物理的な装置が動く場合(ファイルIOならそういうことが生じるよねきっと),CPUはその動作完了をただただ待つ必要も無いもないでしょうから,別のことをさせれば良いのではないですか?
maisumakun

2022/05/20 06:30

> この待ち時間に、I/Oに関する処理がある場合は、CPU1コアをそれで使っているので、待ち時間に別の処理はできないはずです。 どうしてそう考えましたか?
dodox86

2022/05/20 06:39

OSもリアルタイムモニターも無いようなシングルタスクの組み込み系のプログラムと、マルチユーザー、マルチプロセスのOSで事情は異なりますね。ただ、いずれも「割り込み」と言う外部イベントがあり、それを契機に動くことができるし、できるように作ります。アプリケーションの同期・非同期はかなり上位のレベルのお話です。
asapan

2022/05/20 06:59 編集

回答になっていなかったら申し訳ないのですが、この疑問の発端は、並行処理のことを調べていたときにでてきました。1つのコアしか持たないCPUの場合は、並列処理はできないので、並行処理しかできないですよね。並行処理は、短い時間でさまざまなアプリケーションの処理を、コンテキストスイッチを切り替えることで同時に処理しているように見せるという、あくまで”見せかけ”だと認識しています。 そこで、I/Oに関することを調べていたら疑問が沸いたのです。「I/Oの待ち時間は、非同期処理を行えば別の処理ができる」という部分です。例えばファイルの読み込みをしている間の時間を別の処理に使えるということは、1コアのCPUを別の処理に充てている間、ファイルの読み込みに関しては何も処理していない(もう使えるCPUのコアがありませんから。)ということです。この考えがあっているかはわからないですが、もしあっているなら読み込みが完了するまでの間一体何が起こっているのかと疑問に思いました。 例えばファイルのI/Oなら、ストレージも自分でCPU的な処理できる機構を持っていて、OSからの命令でそのCPU的なもので読み込み処理をストレージ自身で行い、その間OSの方は別の処理に充てられる、という感じならすっと理解できると思ったのですが、そうではないですよね...
asapan

2022/05/20 11:44

ほんとですね、ありがとうございます!
SurferOnWww

2022/05/21 01:13

どのレイヤーの話なのかをまず最初に書いてもらう必要があったようです。 質問に書いてある「非同期にして待機時間で別の処理をする」とか 2022/05/20 15:59 のコメントに書いてある「短い時間でさまざまなアプリケーションの処理を・・・」というアプリケーションレイヤーの話であれば私が回答に書いたようなことです。それよりはるか下のハードに近いレイヤーの話であれば DMA とかが出てくると思いますが。
asapan

2022/05/21 03:18

@SurferOnWww >どのレイヤーの話なのかをまず最初に書いてもらう必要があったようです。 確かに仰る通りで、レイヤーによって話が違うということを完全に分かっておりませんでした。質問が明確ではなかったこと、大変申し訳ありません。 今回理解したことを整理すると、 ファイルI/Oでの非同期処理:ハードに付属のDMAがファイル転送を処理している間の話 ネットワークI/Oでの非同期処理:ほかのサーバーが処理している間の話 と確かに何が処理しているかは全く違いましたね...。 しかし丁度WebサーバーのノンブロッキングI/Oに関しても調べていたので仕組みを理解するのに大いに役立ちました。ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。