2017-01-04 2 views
0

マンページから、select()は、同期I/O多重化です。これは、ファイル記述子の読み取りまたは書き込みの準備ができている場合にのみ、次の操作を続行することを意味します。これは、そのfdからのread()のデータがブロックされず、読み取られた合計バイトが返されることを意味します。しかし、非ブロックI/Oの機能をfcntl()と設定してO_NONBLOCKフラグを設定することもできます。 select()O_NONBLOCKの主な違いは何ですか?ソケットで非同期I/Oを使用する理由は何ですか?

答えて

0

selectを使用すると、異なるイベントに対してタイムアウトを指定して複数のディスクリプタを監視できます。

O_NONBLOCKは、現在のスレッドがI/Oが完了するのを待つべきではない状況で使用されます。これは、同じスレッドでUIを更新するなど、もっと多くのことをやっているときに望ましいことです。その場合、I/Oが完了するのを待ってスレッドが一時停止しないようにします。