0

Javaで複数の非ブロッキングソケットを処理するために、ある種のイベントループを実行しています。問題は、ループをそのままにしておくと、コア全体が使用されることです。(たとえば、クアッドコアがあり、プログラムを起動するたびに、CPUは毎回25%にジャンプします。)

Thread.sleep()を使用してプロセッサの使用を遅くすることができることは知っていますが、それを行う適切な方法があるかどうか疑問に思っていました。Thread.sleep(1)がイベントループを制限しているように感じます。

だから私の質問は、どうすればいいですか?それを行う適切な方法はありますか?スレッドの優先度を下げる必要がありますか?Thread.sleep(0、someNanosecondsAmount)を使用する必要がありますか?

4

1 に答える 1

2

すべてのスリープ方法は、最低1ミリ秒でスリープします。より短いyield()を使用できますが、通常はCPUをあきらめません。

ソケットのグループを待つのに忙しい場合は、CPU全体を使用するか、ミリ秒の遅延が発生します。

多くの場合、より良い解決策は、セレクターを使用して、ソケットが使用できるようになるまで待機するか、接続ごとにスレッドでNIOをブロックすることです。

于 2013-01-08T15:19:37.610 に答える