• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブロッキングI/Oについて)

ブロッキングI/OとノンブロッキングI/Oについて

このQ&Aのポイント
  • I/O処理をブロックする必要性とは何か
  • ブロッキングI/OとノンブロッキングI/Oの使い分け方法
  • なぜ初期状態ではブロッキングI/Oが適用されるのか

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>・なぜI/O処理をブロックする必要があるのか 「ノンブロッキング」はデータの受信(送信)完了を待たずに次の処理に移行することができる。 逆にいえば、受信データがそろわないうちに処理を行う為、データ欠損による問題が発生する場合があります。 もしくは、処理途中で次のデータを受信しバッファの上書きの可能性もあります。 >・ブロッキングI/OとノンブロッキングI/Oはどのように使い分けるのか H/W特性、データ内容、それに付随する処理内容によって決定する。 >・ブロッキングI/Oという機能は何故出来たのか 前述の通り。 「なぜ」というよりも「なければ困る」から。 >I/Oポートの制限を行わない方がプログラムを作成しやすいと思うのですが、 「プログラムを作成しやすい」というのは間違いです。 それは「H/W特性」を理解せずにプログラムを作成していることに他なりません。 read「関数」はあくまでも「データを入力する」という抽象的な機能しか持っていません。 その先(入力I/F)が何かは理解できません。これを理解し適切に処理するのがプログラマーの役割です。 >なぜread関数などは初期状態がブロッキングする状態になっているのでしょう。 データを受信して処理を行っている間は、後発データによる上書きを禁止するため。

MIRS
質問者

お礼

ノンブロッキングにした場合データが受信途中のまま次の処理に移行してしまうということになるんですね。 H/W特性やデータ内容を考えた時にはブロッキングの方が良くなることもあるということを考えながらこれからプログラムを作っていきたいと思います。 ありがとうございました。

関連するQ&A