2009-09-26 13 views

答えて

9

I/Oのブロックは、I/Oが実行されている間にプログラムの実行が保留されることを意味します。したがって、プログラムはI/Oが終了するまで待ってから、実行を継続します。 ノンブロッキングI/Oでは、I/O操作中にプログラムを続行できます。

+7

...とを介して通知されますIO操作が完了したときのコールバック。これにより、プログラムのデザインが異なるようになりますが、パフォーマンスが大幅に向上します。 –

+0

@ Lex、ブロッキング操作とノンブロッキング操作の例ありがとう。 – Kalanidhi

+1

@etc_passwd JSでは理解しやすいです。 'alert();'の呼び出しはブロックされます。これは、ユーザーがOKをクリックするまで実行が保留されるためです。 AJAX呼び出しは非ブロックであり、HTTP要求の送信中は実行が継続されます。 –

0

は、単に非ブロッキングI/O(非同期)は、そのことをしながら他の操作を行うことを可能にし、I/Oの他の操作に

4

をブロックするブロックすることは、同時実行の問題だ...と述べました。通常の場合、OSカーネルがユーザープログラムからI/O操作を受け取った後、I/O操作が完了するまでそのプログラムは再び実行されません。その他のプログラムは通常、その間にスケジュールされます。

これはほとんど問題を解決しません。たとえば、read(2)が返ってきたときにI/Oが完了しないかぎり、読み込まれたバイト数をプログラムがどのように知っていますか? write(2)が返ってきたときに操作が進行中であれば、write(2)バッファを再利用できるかどうかをどのように知っていますか?明らかに、非同期I/Oに対しては、より複雑なインターフェースが必要です。

最終的にそれがダウンしています:I/Oは、I/Oは、単にシステムコールで予定されているI/Oが

  • 完了するまで、プログラムをブロックすることにより、プログラムに対する同期起こる

    1. 実際の結果を伝えるための通知メカニズムがあります。
    2. すぐには完了できない場合、I/O操作が失敗するという妥協案があります。これは実際には "非ブロッキング" I/Oのより一般的な使用です。

    全体の問題は、I/Oが考えられる唯一のスレッドをブロックできたときに、マルチスレッド・プログラムをスケジュールするための努力によってさらに複雑になるが、それは別の問題だ...

  • 関連する問題