2

NioWorker.run は、500 ミリ秒のタイムアウトで選択する SelectorUtil.select を呼び出します。

NioClientSocketPipelineSink.Boss.run 呼び出しは、500 ミリ秒のタイムアウトで select を呼び出します。

NioServerSocketPipelinkSink.Boss.run も 1000 ミリ秒のタイムアウトで select を呼び出します。

そのため、ネットワーク上で何も起こらない場合でも、各ワーカーは少なくとも 1 秒に 1 回ウェイクアップします。それはいくつかの問題に対する回避策ですか?私は、良いイベント駆動型プログラムは、何も起こらなかった場合 (つまり、無限のタイムアウトで "select" を呼び出して) 起動してはいけません。ソースには説明がありません。

4

1 に答える 1

0

サーバーをシャットダウンしたい場合はどうなりますか?タイムアウトを使用しない場合、実際のイベントがネットワークから発生したときにのみウェイクアップします。クリーンな方法でシャットダウンするのに時間がかかる場合があります(おそらく決してありません)。これらのタイムアウトはほとんどの場合許容可能であり、shutdownコマンドを発行してからあまり長く待つ必要はなく、イベントループのチェックはCPUリソースをあまり消費しません。

于 2011-05-25T11:43:43.577 に答える