2016-11-04 2 views
0

POSIXのselect()呼び出しでタイムアウト値が不安です。なぜ私は0(ファイル記述子をポーリングする)の値が必要なのか理解しています。他にどんな価値観があり、どのような目的に使用されていますか?なぜselect()コールにタイムアウトがありますか?一般的なシナリオでそれに対して妥当な値は何ですか?

+2

非アクティブな接続/ファイル記述子を閉じたり、接続されたピアにキープアライブメッセージをスケジュールしたり、ログファイルにサマリー行を書き込んだり、プログラムファイルの状態を状態ファイルに保存したりするなどのハウスキーピングが必要な場合があります。 – joop

答えて

0

FD_SETSIZEが最も高いファイル記述子の強い制限であるため)poll(2)は、多重化の目的でしばしばselect(2)よりも優れていることに注意してください。

実用的なタイムアウトは状況によって異なります。多くのGUI widget toolkitフレームワークでは、画面が50または60Hzでリフレッシュされることがわかっているので、おそらくタイムアウトをそれに応じて(たとえば、20ミリ秒に)設定します。または、マウスに少なくとも毎秒10回以上追跡する必要があることも知っています。実際には、これらのツールキットにもタイムアウトがあるため、event loopの各サイクルでpollまたはselectタイムアウトが動的に計算されます。 Webサーバーでは、タイムアウトは設定可能で、プログラムはそれに応じてpollタイムアウトを計算します。

実際には、poll(2)またはselect(2)は、しばしば1ミリ秒を超え、おそらく数十秒未満です。 YMMV。ところで、正確なタイムアウトはしばしばそれほど重要ではありません。

ウェブページAnswers section of Norvig's Teach Yourself Programming in Ten Yearsも参照してください(非常に興味深い)。

+2

私は、あなたが選択しているファイル記述子の1つにマウスを動かすと予想されるため、タイムアウトのないselectを安全に使用できるという混乱があると思います。本当の疑問は、実際のプログラムデザインでは、コールセレクト以外のタイムアウト後に誰かがやり遂げることを期待しているかもしれないということです。 – Random832

+0

しかし、それは状況とアプリケーションによって異なります。 –

関連する問題