2016-03-26 6 views
-2

サーバーにはできるだけ早く応答する必要がありますが、サーバープロセスは要求があれば常にポーリングしませんか? それで、whileループが好きです。しかし、訪問がなければCPU(シングルコア)はすべて消費されないのはなぜですか?なぜ、httpサーバは多くのCPUを消費していませんか?

+3

サーバーソフトウェアとその設定方法など、さらに詳細を提供する必要があります。一般的に、サーバーは積極的にポーリングを行わないので、新しい接続/データが利用可能になったときにOSに通知します。それまでは彼らはただ眠る。 – kicken

+0

@kicken本当に申し訳ありませんが、私はサーバーの詳細についてよく分かりません。私は一般的な直感を意味した。ハードウェアの中断のようなメカニズムであることを意味しますか? – heLomaN

答えて

3

常にポーリングするサーバープロセスではありませんか?

これは妥当な実装ではない場合。

多くのHTTPサーバーと通信サーバーの実装があり、ポーリングはこれらのいずれにも適したアーキテクチャではありません。

たとえば、一部のサーバーでは、イベント、コールバックなどを使用した非同期I/O操作が使用されます。他の実装では、マルチスレッドモードで動作している間にソケットAPIをブロックすることに依存していますが、他のアーキテクチャも可能です...

+0

ブロッキングソケットAPIを使用する場合、ブロックされるとプロセスは停止し、CPUを消費しません。それは...ですか? – heLomaN

+0

@heLomaN - そうです。 – Amit

+0

'非同期I/O'を使うために、リクエストはそれらを処理するいくつかのアクションを引き起こします。メインループはありませんが、なぜプロセスが終了しないのですか?手続き型プログラミングのソフトウェアは、コールバックを登録しても実行後に終了する必要があります。実行していないときにどのように呼び出されますか? – heLomaN

0

要求がある場合には常にポーリングプロセスですか?これは、accept()コール又はselect()コールのいずれかで、をブロックしている

号。ポーリングなし。

+0

FTRには、 'epoll_wait()'のような他のオプションがあります。これは、Windowsについて話していない場合です。 –

関連する問題